【问题标题】:WPF Trigger not workingWPF 触发器不工作
【发布时间】:2018-01-14 11:43:55
【问题描述】:

我正在尝试使用triggers 来修改我的控件的属性。我有一个RadioButton 和一个Border,我想修改边框BackgroundRadioButtonIsSelected。所以这是我的代码:

<Border BorderBrush="{DynamicResource MaterialDesignDivider}">
     <RadioButton IsChecked="{Binding Erase_IsSelected}" Content="E">
         <RadioButton.Resources>
              <Style TargetType="{x:Type RadioButton}">
                  <Style.Triggers>
                       <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Background" Value="{DynamicResource MaterialDesignSelection}" />
                       </Trigger>
                  </Style.Triggers>
              </Style>
         </RadioButton.Resources>
     </RadioButton>
</Border>

这似乎不起作用,我应该如何解决它?谢谢!

【问题讨论】:

  • 我们需要知道你的控件的结构。它是用作DataTemplate 还是任何其他类型的Template?我看不到你的Border 包含在代码 sn-p 中。
  • @XAMlMAX 我没有使用任何模板。我重新编辑了我的描述。
  • 如果你想改变BorderBackground,那么你应该使用Style代替Border NOT RadioButton。使用 x:Name 作为 Button 的标签,并在 BorderStyle 中引用它。

标签: c# wpf triggers


【解决方案1】:

对绑定到RadioButtonIsChecked 属性的Border 使用Style

<Border BorderBrush="{DynamicResource MaterialDesignDivider}">
    <Border.Style>
        <Style TargetType="Border">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=rb}" Value="True">
                    <Setter Property="Background" Value="{DynamicResource MaterialDesignSelection}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
    <RadioButton x:Name="rb" IsChecked="{Binding Erase_IsSelected}" Content="E" />
</Border>

RadioButton 样式不能更改 Border 的属性。

【讨论】:

  • 这个设置属性Style两次没有通过编译
【解决方案2】:

在您的 xaml 中添加 OnChecked 事件:

<RadioButton Checked="Radiobutton_OnChecked" Content="E">
      <RadioButton.Resources>
          <Style TargetType="{x:Type RadioButton}">
               <Style.Triggers>
                     <Trigger Property="IsChecked" Value="True">
                          <Setter Property="Background" Value="{DynamicResource MaterialDesignSelection}" />
                     </Trigger>
               </Style.Triggers>
          </Style>
      </RadioButton.Resources>
 </RadioButton>

这将在您的 .cs 中为您创建一个函数,如下所示,您可以在其中更改背景:

private void Radiobutton_OnChecked(object sender, RoutedEventArgs e)
{
    RadioButton rdb = (RadioButton) sender;

    rdb.Background = new SolidColorBrush(Colors.Green);
}

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多