一、WPF自定义组合控件的用法
由于C#WPF内的原生控件的模样不太好看,所以很多时候都需要自己去修改原本的控件,通过自定义控件模板,已达到优化控件的目的,但在模板内的控件用常规的方法不好访问,虽然有通过名称获取控件的方法,但由于是xaml,所以不好控制在什么时候去访问。
实现如下效果,以下是通过两个Lable和一个TextBox控件组合成一个Lable控件后的效果。
1、Xaml代码:
<Label Content="label1" Grid.Column="1" Grid.Row="15" FontSize="18" Margin="10,10,10.4,0.2" ContentTemplate="{StaticResource datatemplate1}" Grid.RowSpan="2"/>
对datatemplate1的内容定义
<Window.Resources>
<DataTemplate x:Key="datatemplate1" >
<StackPanel Orientation="Horizontal">
<Label Content="闪烁频率f:"/>
<TextBox Text=" " x:Name="write_frequency" Width="65" Background="AliceBlue" IsEnabled="False" Loaded="write_frequency_Loaded"/>
<Label Content="HZ"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
注意:常规下我们无法在后台对名称write_frequency控件进行操作,我们注册Loaded事件
2、后台代码
这一步是用C#代码定义XAML代码里的资源
TextBox inputFreTextBox;
private void write_frequency_Loaded(object sender, RoutedEventArgs e)
{
this.inputFreTextBox = sender as TextBox;
}
之后通过对inputFreTextBox操作,控制该对象。
参考:https://jingyan.baidu.com/article/acf728fd99706ff8e410a340.html
二、WPF对象级资源的用法
一中的应用中用到WPF资源,WPF不但支持程序性级资源(外部文件与程序主体分离,编译器允许我们把外部文件编译进程序主体),而且还支持对象级资源,每个界面元素都可以携带自己的资源并可被自己的子级元素所共享。
1、StaticResource和DynamicResource的区别
(1)StaticResource是静态资源,程序载入内存时对资源一次性使用,之后不再去访问这个资源了。
(2)DynamicResource是动态资源,程序运行过程中依然会去访问资源。