WPF 后台创建控件及设置属性

时间:2021-02-11 17:24:54
使用后台代码:
1 在XAML默认的Grid中创建一个border.
2 之后给border设置Grid.Column和Grid.Row
3 之后在border中加一个grid(border内只能加一个控件.所以加用grid容器)
4 再在grid中加一个Button和TextBlock.

如何在后台用一个方法实现呢?

13 个解决方案

#1


定义好border之后
grid.children.add(border);

#2


引用 1 楼 zhoumeiwen 的回复:
定义好border之后
grid.children.add(border);

grid.Row和grid.Column怎么设置呢?

#3


引用 1 楼 zhoumeiwen 的回复:
定义好border之后
grid.children.add(border);


知道了
int gridRowIndex=0;
int gridColumnIndex= 0;
boarder.SetValue(Grid.RowProperty, gridRowIndex);
boarder.SetValue(Grid.ColumnProperty, gridColumnIndex);

想问下后台如何通过代码给boarder加一个Style?

#4


引用 2 楼 sunlyk 的回复:
Quote: 引用 1 楼 zhoumeiwen 的回复:

定义好border之后
grid.children.add(border);

grid.Row和grid.Column怎么设置呢?

 Border border = new Border();
            border.BorderThickness = new Thickness(1, 1, 1, 1);
            border.BorderBrush = Brushes.Blue;
            border.SetValue(Grid.ColumnProperty, 1);
            border.SetValue(Grid.RowProperty, 1);
            grid.Children.Add(border);

#5


引用 3 楼 sunlyk 的回复:
Quote: 引用 1 楼 zhoumeiwen 的回复:

定义好border之后
grid.children.add(border);


知道了
int gridRowIndex=0;
int gridColumnIndex= 0;
boarder.SetValue(Grid.RowProperty, gridRowIndex);
boarder.SetValue(Grid.ColumnProperty, gridColumnIndex);

想问下后台如何通过代码给boarder加一个Style?

你要先定义好一个Style,然后
btnAnohter.Style = (Style)this.TryFindResource("AnotherButtonStyle"); 

#6


引用 5 楼 zhoumeiwen 的回复:
Quote: 引用 3 楼 sunlyk 的回复:

Quote: 引用 1 楼 zhoumeiwen 的回复:

定义好border之后
grid.children.add(border);


知道了
int gridRowIndex=0;
int gridColumnIndex= 0;
boarder.SetValue(Grid.RowProperty, gridRowIndex);
boarder.SetValue(Grid.ColumnProperty, gridColumnIndex);

想问下后台如何通过代码给boarder加一个Style?

你要先定义好一个Style,然后
btnAnohter.Style = (Style)this.TryFindResource("AnotherButtonStyle"); 


其实是:
先在XAML中定义Style.之后将该Style传到创建的属性中.
textblock.SetResourceReference(TextBlock.StyleProperty, "S_TextBlock_No");

你说的button.Style好像不是WPF的Style.看命名空间可以看的出.

#7


我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。

#8


引用 7 楼 u010202504 的回复:
我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.

#9


引用 8 楼 sunlyk 的回复:
Quote: 引用 7 楼 u010202504 的回复:

我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.


写好自定义控件再重复调用。

#10


引用 9 楼 u010202504 的回复:
Quote: 引用 8 楼 sunlyk 的回复:

Quote: 引用 7 楼 u010202504 的回复:

我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.


写好自定义控件再重复调用。


好主意,
再补充问一个小白问题:
我刚尝试写自定义控件,但是只有图形界面,没办法切换到xaml界面.
如何切换到xaml界面呢?

#11


引用 10 楼 sunlyk 的回复:
Quote: 引用 9 楼 u010202504 的回复:

Quote: 引用 8 楼 sunlyk 的回复:

Quote: 引用 7 楼 u010202504 的回复:

我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.


写好自定义控件再重复调用。


好主意,
再补充问一个小白问题:
我刚尝试写自定义控件,但是只有图形界面,没办法切换到xaml界面.
如何切换到xaml界面呢?


先确定是不是创建成winfrom控件了,如果是wpf控件,切换到图形界面就能看到xaml面板,看不到就看看是不是窗口隐藏了。

#12


引用 11 楼 u010202504 的回复:
Quote: 引用 10 楼 sunlyk 的回复:

Quote: 引用 9 楼 u010202504 的回复:

Quote: 引用 8 楼 sunlyk 的回复:

Quote: 引用 7 楼 u010202504 的回复:

我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.


写好自定义控件再重复调用。


好主意,
再补充问一个小白问题:
我刚尝试写自定义控件,但是只有图形界面,没办法切换到xaml界面.
如何切换到xaml界面呢?


先确定是不是创建成winfrom控件了,如果是wpf控件,切换到图形界面就能看到xaml面板,看不到就看看是不是窗口隐藏了。


现在可以了.也不知道为什么.重新创建就好了(可能选错类型 - -)
高手再问一个问题:
我自定义一个控件之后,在里面放了一个textblock,但是如何设置依赖属性使自定义控件也可以进行绑定呢?
参考网上的demo:
控件后台:

public partial class UC_ReagentWellTextBlock : UserControl
    {
        public UC_ReagentWellTextBlock()
        {
            InitializeComponent();
            this.DataContext = this;
            Binding bindInformation = new Binding("InformationText");
            bindInformation.Mode = BindingMode.TwoWay;
            this.TextBlockInformatioin.SetBinding(TextBlock.TextProperty, bindInformation);

            Binding bindPosition = new Binding("PositionText");
            bindPosition.Mode = BindingMode.TwoWay;
            this.TextBlockPosition.SetBinding(TextBlock.TextProperty, bindPosition);
        }

        public static readonly DependencyProperty PositionTextProperty = DependencyProperty.Register("Position", typeof(string), typeof(UC_ReagentWellTextBlock));
        public static readonly DependencyProperty InformationTextProperty = DependencyProperty.Register("_information", typeof(string), typeof(UC_ReagentWellTextBlock));

        public string PositionText
        {
            get { return (string)GetValue(PositionTextProperty); }
            set { SetValue(PositionTextProperty, value); }
        }

        public string InformationText
        {
            get { return (string)GetValue(InformationTextProperty); }
            set { SetValue(InformationTextProperty, value); }
        }
    }

控件前台:
[code=XAML]
    <TextBlock x:Name="TextBlockPosition"
                   Style="{DynamicResource s_Position}"/>
                
        <TextBlock x:Name="TextBlockInformatioin"
                   Style="{DynamicResource s_Info}"/>
[/code]
窗体后台:

well3_1.DataContext = IC_LABRARY.Instrument.Instrument.InstrumentRackSample.InstrumentWellSampleArray[2].InstrumentContainerTube.InformationManagementPatient;
            well3_1.SetBinding(UC.UC_ReagentWellTextBlock.PositionTextProperty, bind2);
            well3_1.SetBinding(UC.UC_ReagentWellTextBlock.InformationTextProperty, bind2);

窗体前台:
[code=XAML]
<myReactionWell:UC_ReagentWellTextBlock x:Name="well3_1" Grid.Row="0" Grid.Column="2" RenderTransformOrigin="0.424,1.627"/>
[/code]

#13


学习到了了。

#1


定义好border之后
grid.children.add(border);

#2


引用 1 楼 zhoumeiwen 的回复:
定义好border之后
grid.children.add(border);

grid.Row和grid.Column怎么设置呢?

#3


引用 1 楼 zhoumeiwen 的回复:
定义好border之后
grid.children.add(border);


知道了
int gridRowIndex=0;
int gridColumnIndex= 0;
boarder.SetValue(Grid.RowProperty, gridRowIndex);
boarder.SetValue(Grid.ColumnProperty, gridColumnIndex);

想问下后台如何通过代码给boarder加一个Style?

#4


引用 2 楼 sunlyk 的回复:
Quote: 引用 1 楼 zhoumeiwen 的回复:

定义好border之后
grid.children.add(border);

grid.Row和grid.Column怎么设置呢?

 Border border = new Border();
            border.BorderThickness = new Thickness(1, 1, 1, 1);
            border.BorderBrush = Brushes.Blue;
            border.SetValue(Grid.ColumnProperty, 1);
            border.SetValue(Grid.RowProperty, 1);
            grid.Children.Add(border);

#5


引用 3 楼 sunlyk 的回复:
Quote: 引用 1 楼 zhoumeiwen 的回复:

定义好border之后
grid.children.add(border);


知道了
int gridRowIndex=0;
int gridColumnIndex= 0;
boarder.SetValue(Grid.RowProperty, gridRowIndex);
boarder.SetValue(Grid.ColumnProperty, gridColumnIndex);

想问下后台如何通过代码给boarder加一个Style?

你要先定义好一个Style,然后
btnAnohter.Style = (Style)this.TryFindResource("AnotherButtonStyle"); 

#6


引用 5 楼 zhoumeiwen 的回复:
Quote: 引用 3 楼 sunlyk 的回复:

Quote: 引用 1 楼 zhoumeiwen 的回复:

定义好border之后
grid.children.add(border);


知道了
int gridRowIndex=0;
int gridColumnIndex= 0;
boarder.SetValue(Grid.RowProperty, gridRowIndex);
boarder.SetValue(Grid.ColumnProperty, gridColumnIndex);

想问下后台如何通过代码给boarder加一个Style?

你要先定义好一个Style,然后
btnAnohter.Style = (Style)this.TryFindResource("AnotherButtonStyle"); 


其实是:
先在XAML中定义Style.之后将该Style传到创建的属性中.
textblock.SetResourceReference(TextBlock.StyleProperty, "S_TextBlock_No");

你说的button.Style好像不是WPF的Style.看命名空间可以看的出.

#7


我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。

#8


引用 7 楼 u010202504 的回复:
我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.

#9


引用 8 楼 sunlyk 的回复:
Quote: 引用 7 楼 u010202504 的回复:

我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.


写好自定义控件再重复调用。

#10


引用 9 楼 u010202504 的回复:
Quote: 引用 8 楼 sunlyk 的回复:

Quote: 引用 7 楼 u010202504 的回复:

我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.


写好自定义控件再重复调用。


好主意,
再补充问一个小白问题:
我刚尝试写自定义控件,但是只有图形界面,没办法切换到xaml界面.
如何切换到xaml界面呢?

#11


引用 10 楼 sunlyk 的回复:
Quote: 引用 9 楼 u010202504 的回复:

Quote: 引用 8 楼 sunlyk 的回复:

Quote: 引用 7 楼 u010202504 的回复:

我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.


写好自定义控件再重复调用。


好主意,
再补充问一个小白问题:
我刚尝试写自定义控件,但是只有图形界面,没办法切换到xaml界面.
如何切换到xaml界面呢?


先确定是不是创建成winfrom控件了,如果是wpf控件,切换到图形界面就能看到xaml面板,看不到就看看是不是窗口隐藏了。

#12


引用 11 楼 u010202504 的回复:
Quote: 引用 10 楼 sunlyk 的回复:

Quote: 引用 9 楼 u010202504 的回复:

Quote: 引用 8 楼 sunlyk 的回复:

Quote: 引用 7 楼 u010202504 的回复:

我一直都觉得wpf在后台动态添加控件是极为蛋疼的一件事。


求教.如果要话表格.怎么画.
安分的写xaml吗?很多重复耶~.
而且维护性比较差.重复内容写错一点.全要改.


写好自定义控件再重复调用。


好主意,
再补充问一个小白问题:
我刚尝试写自定义控件,但是只有图形界面,没办法切换到xaml界面.
如何切换到xaml界面呢?


先确定是不是创建成winfrom控件了,如果是wpf控件,切换到图形界面就能看到xaml面板,看不到就看看是不是窗口隐藏了。


现在可以了.也不知道为什么.重新创建就好了(可能选错类型 - -)
高手再问一个问题:
我自定义一个控件之后,在里面放了一个textblock,但是如何设置依赖属性使自定义控件也可以进行绑定呢?
参考网上的demo:
控件后台:

public partial class UC_ReagentWellTextBlock : UserControl
    {
        public UC_ReagentWellTextBlock()
        {
            InitializeComponent();
            this.DataContext = this;
            Binding bindInformation = new Binding("InformationText");
            bindInformation.Mode = BindingMode.TwoWay;
            this.TextBlockInformatioin.SetBinding(TextBlock.TextProperty, bindInformation);

            Binding bindPosition = new Binding("PositionText");
            bindPosition.Mode = BindingMode.TwoWay;
            this.TextBlockPosition.SetBinding(TextBlock.TextProperty, bindPosition);
        }

        public static readonly DependencyProperty PositionTextProperty = DependencyProperty.Register("Position", typeof(string), typeof(UC_ReagentWellTextBlock));
        public static readonly DependencyProperty InformationTextProperty = DependencyProperty.Register("_information", typeof(string), typeof(UC_ReagentWellTextBlock));

        public string PositionText
        {
            get { return (string)GetValue(PositionTextProperty); }
            set { SetValue(PositionTextProperty, value); }
        }

        public string InformationText
        {
            get { return (string)GetValue(InformationTextProperty); }
            set { SetValue(InformationTextProperty, value); }
        }
    }

控件前台:
[code=XAML]
    <TextBlock x:Name="TextBlockPosition"
                   Style="{DynamicResource s_Position}"/>
                
        <TextBlock x:Name="TextBlockInformatioin"
                   Style="{DynamicResource s_Info}"/>
[/code]
窗体后台:

well3_1.DataContext = IC_LABRARY.Instrument.Instrument.InstrumentRackSample.InstrumentWellSampleArray[2].InstrumentContainerTube.InformationManagementPatient;
            well3_1.SetBinding(UC.UC_ReagentWellTextBlock.PositionTextProperty, bind2);
            well3_1.SetBinding(UC.UC_ReagentWellTextBlock.InformationTextProperty, bind2);

窗体前台:
[code=XAML]
<myReactionWell:UC_ReagentWellTextBlock x:Name="well3_1" Grid.Row="0" Grid.Column="2" RenderTransformOrigin="0.424,1.627"/>
[/code]

#13


学习到了了。