2017-08-07 144 views
0

我试图用triggers修改我control.I的财产有RadioButtonBorder,我想修改边框BackgroundRadioButton IsSelected。所以这里是我的代码:WPF触发器不工作

<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> 

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

+2

我们需要知道你的控制结构。它用作'DataTemplate'还是其他类型的'Template'?我看不到你的'Border'包含在代码片段中。 – XAMlMAX

+0

@XAMlMAX我没有使用任何模板。我重新编辑了我的描述。 – BarryLib

+2

如果你想改变'Border'的'Background',那么你应该'Style'用于'Border' ** NOT **'RadioButton'。使用'x:Name'作为Button的标签,并在'Border'的'Style'中引用它。 – XAMlMAX

回答

3

使用Style用于结合所述RadioButtonIsChecked属性Border

<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> 

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

+0

这套属性'Style'两次没有通过编译 – BarryLib

+0

肯定有效。谢谢! – BarryLib

-1

添加OnChecked在XAML中事件:

<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); 
}