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

时间:2012-03-03 21:28:07

标签: c# .net wpf

我想为自定义按钮模板设置一个模板属性,其中包含影响图像内容的不同选项。

  1. 关闭
  2. 最大化
  3. 恢复
  4. 最小化
  5. 因此,当控件的用户想要将按钮的类型设置为最大化时,他们会从属性检查器中的下拉列表中选择它,然后嵌入按钮中的图像控件的源将变为“{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>
    

1 个答案:

答案 0 :(得分:2)

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

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

http://wpftutorial.net/HowToCreateACustomControl.html