C# WPF задать стиль для ContentPresenter'ов которые внутри GridViewRowPresenter

281
18 июля 2021, 17:20

GridView состоит с GridViewRowPresenter'ов и если GridViewColumn задан DataTemplate для ячеек, то внутри GridViewRowPresenter'а будут не TextBlock а ContentPresenter с тем что мы зададим в DataTemplate внутри. Мне нужно чтобы ContentPresenter в каждом GridViewRowPresenter имел HorizontalAlignment.Stretch и VerticalAlignment.Stretch т.е. растягивался на всю ячейку, используя VisualTreeHelper у меня получилось достучатся до ContentPresenter'a одной строки и растягнуть его, но нужно во всех строках так, т.е задать стиль для ContentPresenter'ов которые внутри GridViewRowPresenter'ов.

Я задал стиль для ListViewItem где ContentPresenter изменил на GridViewRowPresenter и собственно попробовал задать стиль ContentPresenter'a в ресурсы GridViewRowPresenter'а но результата нету

<Style x:Key="FocusVisual">
   <Setter Property="Control.Template">
     <Setter.Value>
       <ControlTemplate>
         <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
       </ControlTemplate>
     </Setter.Value>
   </Setter>
 </Style>
 <SolidColorBrush x:Key="Item.MouseOver.Background" Color="#1F26A0DA"/>
 <SolidColorBrush x:Key="Item.MouseOver.Border" Color="#a826A0Da"/>
 <SolidColorBrush x:Key="Item.SelectedInactive.Background" Color="#3DDADADA"/>
 <SolidColorBrush x:Key="Item.SelectedInactive.Border" Color="#FFDADADA"/>
 <SolidColorBrush x:Key="Item.SelectedActive.Background" Color="#3D26A0DA"/>
 <SolidColorBrush x:Key="Item.SelectedActive.Border" Color="#FF26A0DA"/>
 <Style TargetType="{x:Type ListViewItem}">
   <Setter Property="SnapsToDevicePixels" Value="True"/>
   <Setter Property="Padding" Value="4,1"/>
   <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
   <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
   <Setter Property="Background" Value="Transparent"/>
   <Setter Property="OverridesDefaultStyle" Value="True"/>
   <Setter Property="BorderBrush" Value="Transparent"/>
   <Setter Property="BorderThickness" Value="1"/>
   <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
   <Setter Property="Template">
     <Setter.Value>
       <ControlTemplate TargetType="{x:Type ListViewItem}">
         <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
         <GridViewRowPresenter OverridesDefaultStyle="True" Name="rp" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
           <GridViewRowPresenter.Resources>
             <Style TargetType="{x:Type ContentPresenter}">
               <Setter Property="OverridesDefaultStyle" Value="True"/>
               <Setter Property="VerticalAlignment" Value="Stretch"/>
               <Setter Property="HorizontalAlignment" Value="Stretch"/>
             </Style>
           </GridViewRowPresenter.Resources>
         </GridViewRowPresenter>
         </Border>
       <ControlTemplate.Triggers>
         <MultiTrigger>
           <MultiTrigger.Conditions>
             <Condition Property="IsMouseOver" Value="True"/>
           </MultiTrigger.Conditions>
             <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.MouseOver.Background}"/>
             <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.MouseOver.Border}"/>
         </MultiTrigger>
         <MultiTrigger>
           <MultiTrigger.Conditions>
             <Condition Property="Selector.IsSelectionActive" Value="False"/>
             <Condition Property="IsSelected" Value="True"/>
           </MultiTrigger.Conditions>
             <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Background}"/>
             <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Border}"/>
         </MultiTrigger>
         <MultiTrigger>
           <MultiTrigger.Conditions>
             <Condition Property="Selector.IsSelectionActive" Value="True"/>
             <Condition Property="IsSelected" Value="True"/>
           </MultiTrigger.Conditions>
             <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Background}"/>
             <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Border}"/>
           </MultiTrigger>
           <Trigger Property="IsEnabled" Value="False">
             <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
           </Trigger>
         </ControlTemplate.Triggers>
       </ControlTemplate>
     </Setter.Value>
   </Setter>
 </Style>

и кстати стиль работает, но не работают setter'ы на VerticalAlignment и HorizontalAlignment, т.е что-то их перезадает

Answer 1

За Stretch ячеек отвечают

<Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
<Setter Property="VerticalContentAlignment" Value="Stretch"/>

в ListViewItem

READ ALSO
Ожидание наполнения массива в другом потоке

Ожидание наполнения массива в другом потоке

У меня есть глобальный массив и 2 события eventНа момент запуска программы события вызываются параллельно

182
C# как добавить GameObject в код

C# как добавить GameObject в код

Я делаю игру в юнити, сделал спавн объектов в случайных координатах, которые я задаюЗа объект который я спавню отвечает public GameObject hazard;

297
Загрузка файлов в потоке в WPF

Загрузка файлов в потоке в WPF

Всем приветПытаюсь Использую WPF на чистом MVVM и FluentFTP для создания простого клиента, который скачивает файлы с удаленного сервера

163