2017-12-29 38 views
1

내 응용 프로그램에서 특정 TextBlock의 텍스트는 RadioButton 중 어느 것이 검사되는지에 따라 달라집니다.C# WPF : DataTrigger의 RadioButton IsChecked 속성 사용

<Window x:Class="UTScanForm.Support.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:UTScanForm.Support" 
     mc:Ignorable="d" 
     Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <StackPanel> 
      <RadioButton x:Name="RB1" Content="RB1"/> 
      <RadioButton x:Name="RB2" Content="RB2"/> 
      <TextBlock Text="none"> 
       <TextBlock.Style> 
        <Style TargetType="TextBlock"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding IsChecked, ElementName=RB1}" Value="True"> 
           <Setter Property="Text" Value="RB1"/> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding IsChecked, ElementName=RB2}" Value="True"> 
           <Setter Property="Text" Value="RB2"/> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </StackPanel> 
    </Grid> 
</Window> 

상기 코드가 나타내는 바와 같이, 두 개의 라디오 버튼, 및 RB1RB2가있다 : 다음은 XAML의 예이다. RB1을 선택하면 텍스트 블록의 텍스트는 RB1이되고 그렇지 않으면 RB2이됩니다. 그러나 코드가 작동하지 않습니다. 당신은 내가 만든 실수와 올바른 해결책이 무엇인지 지적 해 주시겠습니까?

답변

2

이것은 dependency property value precedence이 원인입니다. TextBlock의 Text="none" 속성은 스타일이 적용하는 것보다 우선합니다. 이 기능은 버그가 아니라 기능입니다. 여러 컨트롤에서 사용되는 스타일로 기본값을 설정 한 다음 특정 인스턴스에 대해이를 재정의 할 수 있습니다.

수정 방법은 간단합니다. 스타일 설정기로 기본 "없음"텍스트를 설정하면 다른 스타일 설정자가이를 무시할 수 있습니다.

<TextBlock> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Setter Property="Text" Value="none" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsChecked, ElementName=RB1}" Value="True"> 
        <Setter Property="Text" Value="RB1"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding IsChecked, ElementName=RB2}" Value="True"> 
        <Setter Property="Text" Value="RB2"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

이것은 DataTemplate 또는 ControlTemplate 트리거에는 적용되지 않습니다. 속성을 무시할 수 있습니다.

관련 문제