WPF Change a property in a customcontrol after a button click

穿精又带淫゛_ 提交于 2019-12-13 04:07:37

问题


I posted a question in this link. maybe I'm not well expressed. It's very simple, I want to change a property in a usercontrol or CustomControl after a click on a Boutton outside...

The code of the customcontrol is as follows :

    <Style TargetType="{x:Type local:CustomControl1}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                <Border x:Name="container" Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">

                </Border>
                <ControlTemplate.Triggers>
                    <Trigger  Property="Hidden" Value="true">
                        <Setter Property="BorderBrush" Value="Blue"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>



</Style>

 public class CustomControl1 : Control
{
    static CustomControl1()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
    }



    public bool Hidden
    {
        get { return (bool)GetValue(HiddenProperty); }
        set { SetValue(HiddenProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Hidder.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty HiddenProperty =
        DependencyProperty.Register("Hidden", typeof(bool), typeof(CustomControl1), new PropertyMetadata(false));


}

And a simple window for test

<Window x:Class="WpfTestCustomControl.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfCustomBorder;assembly=WpfCustomBorder"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="400"/>
        <ColumnDefinition Width="70"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <local:CustomControl1 x:Name="cc" BorderBrush="Red" BorderThickness="3" Margin="10" Grid.RowSpan="2"/>
    <Button Grid.Column="1"  Content="Ok"  Margin="5" Click="Button_Click"/>
</Grid>

namespace WpfTestCustomControl
{
/// <summary>
/// Logique d'interaction pour MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        cc.Hidden = true;
    }
}
}

The property "Hidden" is a dependency property inside the custom control. When i click on the button in mainwindow i want to change the hidden property to true. this must fire the trigger inside the custom control to change borderbrush to "blue" color. While nothing happen.

Is there something missing or is not the right way to do it ? Thanks in advance..


回答1:


Don't hard-set BorderBrush="Red" in your Control's declaration, it's prioritary over any trigger's setter.

You might want to check msdn's Dependency Property Value Precedence



来源:https://stackoverflow.com/questions/24261904/wpf-change-a-property-in-a-customcontrol-after-a-button-click

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!