【问题标题】:How to use a custom style for different controls in XAML如何为 XAML 中的不同控件使用自定义样式
【发布时间】:2023-03-22 07:37:01
【问题描述】:

我为 ressource-dic 中的按钮编写了自定义样式。我的问题是,是否可以将这种样式用于不同的按钮?意味着我需要通过调用样式来设置参数来切换图片目标。 (如何?)

窗口:

<Button .... Style="{DynamicResource downloadButtonStyle}" IsEnabled="True"  />

资源库:

<Style x:Key="downloadButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="IsEnabled" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Image x:Name="PART_img" Source="/FtpUploadClient;component/media/box_48.png"/>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="PART_img" Property="Source" Value="/FtpUploadClient;component/media/box_download_48.png" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="PART_img" Property="Source" Value="/FtpUploadClient;component/media/box_deactivated_48.png" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

【问题讨论】:

    标签: .net wpf templates xaml styles


    【解决方案1】:

    您可以使用附加属性。这将使您能够为每个Button 实例在Template 中指定Images 的源

    <Button Style="{DynamicResource downloadButtonStyle}" 
            ex:ButtonExtension.DefaultImageSource="DefaultImageSource"
            ex:ButtonExtension.MouseOverImageSource="MouseOverImageSource"
            ex:ButtonExtension.DisabledImageSource="DisabledImageSource" /> 
    

    Template

    <ControlTemplate>
        <Image x:Name="PART_img" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                                  Path=(ex:ButtonExtension.DefaultImageSource)}"/
        <ControlTemplate.Triggers>     
            <Trigger Property="IsMouseOver" Value="True">     
                <Setter TargetName="PART_img" Property="Source" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                              Path=(ex:ButtonExtension.MouseOverImageSource)}" />
            </Trigger>     
            <Trigger Property="IsEnabled" Value="False">     
                <Setter TargetName="PART_img" Property="Source" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                              Path=(ex:ButtonExtension.DisabledImageSource)}" />     
            </Trigger>     
        </ControlTemplate.Triggers>     
    </ControlTemplate>
    

    按钮扩展

    public class ButtonExtension
    {
        public static DependencyProperty DefaultImageSourceProperty =
            DependencyProperty.RegisterAttached("DefaultImageSource",
                                                typeof(ImageSource),
                                                typeof(ButtonExtension),
                                                new PropertyMetadata(null));
        public static ImageSource GetImageSource(DependencyObject target)
        {
            return (ImageSource)target.GetValue(DefaultImageSourceProperty);
        }
        public static void SetImageSource(DependencyObject target, ImageSource value)
        {
            target.SetValue(DefaultImageSourceProperty, value);
        }
    
        // Repeat for MouseOverImageSource and DisabledImageSource
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 1970-01-01
      • 2012-12-26
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多