2017-08-07 121 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); 
}