在内容设置自定义按钮,用户控件的样式覆盖(Custom button user control st

2019-10-18 08:20发布

我目前使用Blend和一些教程,我在网上找到,试图使自己的按钮,用户控制。 通常情况下,我只想用一个自定义样式,并把它应用到我想要的控制,但我在一些依赖属性写道以及所以我决定写我自己的用户控制。

东西,我可以不在身边让我的头是如何设置的内容属性,而不会覆盖按钮控件的样式。 我想这可能是我的代码,但我开始新品牌的另一个按钮和我有同样的事情发生 - 在内容属性设置,按键简单地变为白色,并在左上角的黑色文本。

下面是掺和我生成的XAML代码:

<UserControl x:Class="MyUI.Controls.MyButton"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="25" d:DesignWidth="100">
<UserControl.Resources>
    <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Rectangle/>
                        <ContentPresenter 
                        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                        RecognizesAccessKey="True" 
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </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>
</UserControl.Resources>
<Grid>
    <Button Content="Button" Height="25" Style="{DynamicResource MyButtonStyle}" Width="100"/>
</Grid>

现在,如果我在这样的主窗口引用按钮,它会恢复这是用户控制的范围内做任何样式:

<local:MyButton Content="test" />

我需要什么,以使按钮接受不同的内容标签更改?

Answer 1:

你需要的是你的用户控件级别的内容属性连接到您的按钮水平Content属性。 默认情况下,用户控件的内容属性是其唯一的子元素,这是电网在你的情况。 您可以创建自己的内容属性或另外一个不同的名称。 在你的用户控件的.cs文件:

/// <summary>
/// Interaction logic for MyButton.xaml
/// </summary>
public partial class MyButton : UserControl
{
    public new static DependencyProperty ContentProperty =
        DependencyProperty.Register("Content", typeof (object),
                                    typeof (MyButton));

    public new object Content
    {
        get { return GetValue(ContentProperty); }
        set { SetValue(ContentProperty, value); }
    }

    public MyButton()
    {
        InitializeComponent();
    }
}

在您UnserControl的XAML中:

<Button Content="{Binding Path=Content, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" 
            Height="25" Style="{DynamicResource MyButtonStyle}" Width="100"/>

现在,巴顿的内容结合到你的用户控件级别的内容属性。



文章来源: Custom button user control style overwritten when content is set