WPF自定义控件的应用(DynamicResource的使用方法)

1 DynamicResource的使用方法

可以在字典文件 的抬头区写入数:

csharp 复制代码
 <SolidColorBrush x:Key="PrimaryBackgroundColor" Color="#FFABAdB3"/>
    <SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/>
    <SolidColorBrush x:Key="TextSecundaryColor" Color="#FF569DE5"/>

设定好颜色:

则引用时直接使用:

csharp 复制代码
 BorderBrush="{DynamicResource PrimaryBackgroundColor}"

另一种方式 引用 fontFamily 的方式与此相似

csharp 复制代码
  <FontFamily x:Key="HgFont">../../CommonInMy/Fonts/#iconfont</FontFamily>

当然这个只是写在

节点下,如果想整个项目都用这个链接方法就是直接写在 app.xaml 下;

引用方式 FontFamily="{ DynamicResource HgFont}"

2 自定义控件(数据增减下拉操作)

2.1 控件本身类

csharp 复制代码
public class UInputNumberTextBox : Control
    { 
        static UInputNumberTextBox()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(UInputNumberTextBox), new FrameworkPropertyMetadata(typeof(UInputNumberTextBox)));
        }


        private Button btnSubtract;
        private Button btnAdd;


        public int Text
        {
            get { return (int)GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }

        // Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(int), typeof(UInputNumberTextBox), new PropertyMetadata(0));


        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            btnSubtract = GetTemplateChild("btnSubtract") as Button;
            if (btnSubtract != null)
            {
                btnSubtract.Click += BtnSubtract_Click;
            }

            btnAdd = GetTemplateChild("btnAdd") as Button;
            if (btnAdd != null)
            {
                btnAdd.Click += BtnAdd_Click;
            }
        }

        private void BtnAdd_Click(object sender, RoutedEventArgs e)
        {
            UInputNumberTextBox inputText = this as UInputNumberTextBox;
            inputText.Text += 1;
        }

        private void BtnSubtract_Click(object sender, RoutedEventArgs e)
        {
            UInputNumberTextBox inputText = this as UInputNumberTextBox;
            inputText.Text -= 1;
        }
    }

2.2 样式操作:

csharp 复制代码
<SolidColorBrush x:Key="PrimaryBackgroundColor" Color="#FFCFD6E5"/><!--定义颜色-->
    <SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/>
    <SolidColorBrush x:Key="TextSecundaryColor" Color="#FF4E85BD"/>
    <!--<FontFamily x:Key="TextSecundaryColor" fa="#FF569DE5"/>-->

    <Style x:Key="ControNumberTB" TargetType="ControlSet:UInputNumberTextBox">
        <Setter Property="Background" Value="{DynamicResource PrimaryBackgroundColor}" />
        <Setter Property="SnapsToDevicePixels" Value="True" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ControlSet:UInputNumberTextBox">

                    <Border
                        Width="{TemplateBinding Width}"
                        Height="{TemplateBinding Height}"
                        BorderBrush="{DynamicResource PrimaryBackgroundColor}"
                        BorderThickness="1">
                        <StackPanel Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Orientation="Horizontal" >

                            <Grid Width="{TemplateBinding Width}">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="2*" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>

                                <Button
                                    x:Name="btnSubtract"
                                    Grid.Column="0"
                                    Width="{TemplateBinding Height}"
                                    Height="{TemplateBinding Height}"
                                    HorizontalAlignment="Left"
                                    VerticalAlignment="Center"
                                    Background="{DynamicResource PrimaryBackgroundColor}"
                                    BorderThickness="0,0,0,0"
                                    Content="&#xf068;"
                                    Cursor="Hand"
                                    FocusVisualStyle="{x:Null}"
                                    FontFamily="{DynamicResource  HgFont}"
                                    Foreground="{DynamicResource TextSecundaryColor}" /><!--减号-->

                                <TextBox
                                    Grid.Column="1"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Background="Transparent"
                                    BorderThickness="0"
                                    FocusVisualStyle="{x:Null}"
                                    FontSize="{TemplateBinding FontSize}"
                                    Foreground="{TemplateBinding Foreground}"
                                    Text="{Binding Text, RelativeSource={RelativeSource AncestorType=ControlSet:UInputNumberTextBox}, Mode=TwoWay}" />

                                <Button
                                    x:Name="btnAdd"
                                    Grid.Column="2"
                                    Width="{TemplateBinding Height}"
                                    Height="{TemplateBinding Height}"
                                    HorizontalAlignment="Right"
                                    VerticalAlignment="Center"
                                    Background="{DynamicResource PrimaryBackgroundColor}"
                                    BorderThickness="0,0,0,0"
                                    Content="&#xf067;"
                                    Cursor="Hand"
                                    FocusVisualStyle="{x:Null}"
                                    FontFamily="{ DynamicResource  HgFont}"
                                    Foreground="{DynamicResource TextSecundaryColor}" /> <!--加号-->
                            </Grid>
                        </StackPanel>
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style> 

3.引用在界面XAML中。

引用地址:

xmlns:自定义 = "clr-namespace:地址

csharp 复制代码
 xmlns:ControlSet="clr-namespace:海王牌位系统.CommonInMy.Controls"

引用

csharp 复制代码
  <ResourceDictionary Source="../../CommonInMy/Styles/UInputNumberTextBoxStyle.xaml"/>

界面定义,本关键字 加名称

csharp 复制代码
 <ControlSet:UInputNumberTextBox  Grid.Row="6" Grid.Column="1" Width="200"  Height="30"  Margin="0,0,0,10"  FontSize="16"  Style="{DynamicResource ControNumberTB }"  Text="1" />

本单元参考了

https://blog.csdn.net/hisxiwu/article/details/129886874

相关推荐
我要打打代码8 小时前
WPF控件(2)
wpf
c#上位机10 小时前
wpf之行为
c#·wpf
kylezhao201912 小时前
深入浅出地理解 C# WPF 中的属性
hadoop·c#·wpf
全栈开发圈13 小时前
干货分享|HarmonyOS核心技术理念
wpf·鸿蒙
海盗123413 小时前
WPF上位机组件开发-设备状态运行图基础版
开发语言·c#·wpf
我要打打代码15 小时前
WPF入门指南(1)
wpf
一叶星殇15 小时前
WPF UI 框架大全(2026版)
ui·wpf
我要打打代码17 小时前
WPF入门指南(3)
wpf
ALex_zry18 小时前
Redis Cluster 故障转移与高可用实践
数据库·redis·wpf
kylezhao201918 小时前
深入浅出理解 C# WPF 的事件
开发语言·c#·wpf