2017-02-06 2 views
0

У меня есть DataGrid, содержащий некоторые вакансии. Что делает каждая работа, показано в RowDetails.DataGridRowDetails - Toggling issue

Здесь я получил несколько проблем:

Проблема: Почему Image на ToggleButton показан только на Selected и последнем ряду?

Это мой 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> 

ответ

1

когда стиль использует UIElement для содержимого объекта (изображения в данном случае), он создает один экземпляр этого элемента. Когда стиль применяется к нескольким элементам управления, только один из них отображает содержимое, потому что UIElement не может иметь нескольких родителей.

Именно поэтому в большинстве случаев используются нестандартные шаблоны. ToggleButton имеет ContentTemplate свойство, чтобы настроить внешний вид содержательной части: (тот же код для двух других триггеров)

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

Я знаю еще один метод с не-общим ресурсом:

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

Shared устанавливается в ложь и будет экземпляр изображения для каждого использования.

+0

Я обратился только к проблеме 1, так как Problem2 не имеет MCVE и должен быть отдельным вопросом, на мой взгляд, – ASh

+0

Да, подумал о его расщеплении. Сделаем это позже, спасибо за вашу помощь. –