2017-12-26 24 views
0

을 선택한 경우. 여기서부터 알 수 있습니다 : Change WPF DataTemplate for ListBox item if selected DataTemplate을 변경하는 방법. 하지만 색상을 바꾸고 싶기 때문에이 솔루션은 codd에서 불필요한 중복을 만듭니다. DataTemplate이 매우 복잡하고 길면 큰 문제가 될 수 있습니다.변경 속성은 내가 다음과 같은 스타일을 가지고

어떻게 객체 DataTemplate을 내부 하나의 속성의 변화를 달성 할 수 있습니까?

답변

0

실제로 항목이 선택되었는지 여부에 관계없이 항상 동일한 항목 템플리트가 필요하지만 항목을 선택할 때 다른 전경색을 원한다면 쉽습니다. ContentTemplate이 변경되지 않으므로 트리거에서 ContentTemplate을 설정하지 마십시오. 방아쇠로 전경색을 설정하기 만하면됩니다. 템플릿에서 전경색을 혼동하지 않으면 it will inherit whatever the ListBoxItem has for that property입니다.

<Style TargetType="ListBoxItem"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock 
        x:Name="Text" 
        Text="{Binding Name}" 
        Margin="0, 5" 
        FontSize="16" 
        /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

같은 스타일의 더 정교한 버전 : 처음에는 당신이 "ListBoxItem의"의 전경 속성을 변경 한 때문에 작동하지 않을 생각에서

<Style TargetType="ListBoxItem"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Ellipse 
         Height="12" 
         Width="12" 
         VerticalAlignment="Center" 
         x:Name="Ellipse" 
         Fill="Yellow" 
         Stroke="DeepSkyBlue" 
         StrokeThickness="1" 
         /> 
        <TextBlock 
         x:Name="Text" 
         Text="{Binding Name}" 
         Margin="5,5,0,5" 
         FontSize="16" 
         /> 
       </StackPanel> 
       <DataTemplate.Triggers> 
        <DataTrigger 
         Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" 
         Value="True" 
         > 
         <Setter 
          TargetName="Ellipse" 
          Property="Stroke" 
          Value="Orange" 
          /> 
         <Setter 
          TargetName="Ellipse" 
          Property="StrokeThickness" 
          Value="3" 
          /> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

, 그리고 "TextBox". 하지만 그것은 효과가있었습니다 ... 왜 그런지 궁금합니다. 예를 들어 두 개의 텍스트 박스가 있고 하나의 색상 만 변경하려는 경우 동일한 효과를 얻으실 수 있습니까? –

+0

@ ShacharHar-Shuv 업데이트보기 : 대상 트리거를 더 많이 보여주는 템플릿을 추가하고 종속성 속성 값 상속에 대한 기사를 연결했습니다. –