2017-02-06 3 views
0

Ich habe eine DataGrid enthält einige Jobs. Was jeder Job macht, wird in RowDetails angezeigt.DataGridRowDetails - Umschalten Problem

Hier habe ich mehrere Probleme:

Problem: Warum ist die Image auf dem ToggleButton nur auf der Selected und die letzte Zeile gezeigt?

Das ist mein xaml:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <ToggleButton IsChecked="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=DetailsVisibility, Converter={StaticResource BoolToVisConverter}, Mode=TwoWay}">         
     <ToggleButton.Style> 
      <Style TargetType="ToggleButton"> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
       <Setter Property="Content"> 
        <Setter.Value> 
        <Image Source="..\Resources\ic_expand_less_48px.png" Height="16" Width="16" /> 
        </Setter.Value> 
       </Setter> 
       </Trigger> 
       <Trigger Property="IsChecked" Value="{x:Null}"> 
       <Setter Property="Content"> 
        <Setter.Value> 
        <Image Source="..\Resources\ic_expand_more_48px.png" Height="16" Width="16" /> 
        </Setter.Value> 
       </Setter> 
       </Trigger> 
       <Trigger Property="IsChecked" Value="False"> 
       <Setter Property="Content"> 
        <Setter.Value> 
        <Image Source="..\Resources\ic_expand_more_48px.png" Height="16" Width="16" /> 
        </Setter.Value> 
       </Setter> 
       </Trigger> 
      </Style.Triggers> 
      </Style> 
     </ToggleButton.Style> 
     </ToggleButton> 
    </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Antwort

1

wenn Stil ein UIElement für Content-Eigenschaft verwendet (Bild in diesem Fall), erstellt es eine einzelne Instanz dieses Elements. Wenn Stil auf mehrere Steuerelemente angewendet wird, wird nur einer von ihnen Inhalt anzeigen, da UIElement nicht mehrere Eltern haben kann.

Aus diesem Grund werden in den meisten Fällen benutzerdefinierte Vorlagen verwendet. ToggleButton hat Content Eigenschaft die Darstellung von Inhalten Teil anzupassen: (den gleichen Code für andere zwei Trigger)

<Trigger Property="IsChecked" Value="False"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Image Source="..\Resources\ic_expand_more_48px.png" Height="16" Width="16" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Trigger> 

Ich weiß, eine andere Methode mit nicht gemeinsam genutzten Ressource:

<Image x:Key="ExpandMoreImg" x:Shared="False" 
     Source="..\Resources\ic_expand_more_48px.png" Height="16" Width="16" /> 

<Trigger Property="IsChecked" Value="False"> 
    <Setter Property="Content" Value="{StaticResource ExpandMoreImg}"/> 
</Trigger> 

Geteilt auf false gesetzt ist und es wird eine Instanz von Image für jede Verwendung geben

+0

Ich adressierte nur Problem1, da Problem2 MCVE fehlt und sollte eine separate Frage sein, meiner Meinung nach – ASh

+0

yeah darüber nachgedacht es auch zu teilen. Werde das später noch einmal Danke für deine Hilfe tun. –