如何动态设置模板属性选项

本文关键字:属性 选项 设置 何动态 动态 | 更新日期: 2023-09-27 18:26:30

我想为我的自定义按钮模板提供一个模板属性,该属性包括影响图像内容的不同选项。

  1. 关闭
  2. 最大化
  3. 恢复
  4. 最小化

因此,当控件的用户希望将按钮的类型设置为最大时,他们从属性检查器的下拉列表中选择按钮,然后嵌入按钮中的图像控件的源将更改为"{DynamicResource MaximiseGlyph}"。

我如何允许用户为按钮选择模板,然后也会选择合适的图像控制源?

这是我的按钮模板的当前基本代码:

<Style x:Key="WindowControlButton" TargetType="{x:Type Button}">
    <Style.Resources>
        <BitmapImage x:Key="RestoreGlyph" CreateOptions="IgnoreImageCache" CacheOption="OnLoad" UriSource="'Restore.png"/>
        <BitmapImage x:Key="MaximiseGlyph" CreateOptions="IgnoreImageCache" CacheOption="OnLoad" UriSource="'Maximise.png"/>
        <BitmapImage x:Key="CloseGlyph" CreateOptions="IgnoreImageCache" CacheOption="OnLoad" UriSource="'Close.png"/>
        <BitmapImage x:Key="MinimiseGlyph" CreateOptions="IgnoreImageCache" CacheOption="OnLoad" UriSource="'Minimise.png"/>
    </Style.Resources>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Ellipse Fill="Black" Opacity="0.7">
                        <Ellipse.Stroke>
                            <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                                <GradientStop Color="White" Offset="0"/>
                                <GradientStop Color="#FFB8B8B8" Offset="1"/>
                            </LinearGradientBrush>
                        </Ellipse.Stroke>
                    </Ellipse>
                    <Image Source="{DynamicResource RestoreGlyph}"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True"/>
                    <Trigger Property="IsDefaulted" Value="True"/>
                    <Trigger Property="IsMouseOver" Value="True"/>
                    <Trigger Property="IsPressed" Value="True"/>
                    <Trigger Property="IsEnabled" Value="False"/>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如何动态设置模板属性选项

您需要创建一个继承Button的Custom控件来存储您的新属性,并允许您的模板绑定到它。

您可以按照本教程创建自定义控制

http://wpftutorial.net/HowToCreateACustomControl.html