Различный вид в режиме дизайна и во время выполнения - PullRequest
1 голос
/ 02 сентября 2010

У меня небольшая проблема с WPF.Вот мой стиль, в котором я создал шаблон для заголовка столбца DataGrid.

<Window.Resources>
  <Style x:Key="DataGridColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}">
   <Setter Property="VerticalContentAlignment" Value="Center"/>
   <Setter Property="Template">
<Setter.Value>
 <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
  <Grid>
   <Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
    <Microsoft_Windows_Themes:DataGridHeaderBorder.Background>
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
      <GradientStop Color="#FF7EE4FF" Offset="0"/>
      <GradientStop Color="#FF66D6F3" Offset="1"/>
      <GradientStop Color="#FF0097BE" Offset="0.5"/>
     </LinearGradientBrush>
    </Microsoft_Windows_Themes:DataGridHeaderBorder.Background>
    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
   </Microsoft_Windows_Themes:DataGridHeaderBorder>
  </Grid>
 </ControlTemplate>
</Setter.Value>

Вот мой элемент управления представлением DataGrid в сетке:

<DataGrid Margin="46.667,41.333,102,87">
   <DataGrid.Columns>
       <DataGridTemplateColumn Header="Status" Width="*" HeaderStyle=" {DynamicResource     DataGridColumnHeaderStyle1}"/>
   </DataGrid.Columns>
</DataGrid>

Проблема в том, что яможет видеть измененный заголовок в дизайнере VS или в Blend, но при запуске стиль заголовка моего приложения по умолчанию.Кто-нибудь может помочь?Заранее спасибо.

РЕДАКТИРОВАТЬ

Просто нашел интересную вещь.Когда я помещаю стиль в

DataGridTemplateColumn.HeaderStyle

он работает

       <DataGrid Margin="46.667,41.333,102,87">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Status" Width="*">
                <DataGridTemplateColumn.HeaderStyle>
                    <Style  TargetType="{x:Type DataGridColumnHeader}">
                        <Setter Property="VerticalContentAlignment" Value="Center"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                                    <Grid>
                                        <Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
                                            <Microsoft_Windows_Themes:DataGridHeaderBorder.Background>
                                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                    <GradientStop Color="#FF7EE4FF" Offset="0"/>
                                                    <GradientStop Color="#FF66D6F3" Offset="1"/>
                                                    <GradientStop Color="#FF0097BE" Offset="0.5"/>
                                                </LinearGradientBrush>
                                            </Microsoft_Windows_Themes:DataGridHeaderBorder.Background>
                                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                        </Microsoft_Windows_Themes:DataGridHeaderBorder>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGridTemplateColumn.HeaderStyle>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

Почему это имеет значение?

1 Ответ

1 голос
/ 02 сентября 2010

Похоже, что DynamicResource не разрешается правильно во время выполнения. Попробуйте переключить ваш DynamicResource на StaticResource следующим образом:

<DataGridTemplateColumn Header="Status" Width="*"
  HeaderStyle="{StaticResource DataGridColumnHeaderStyle1}"/>

Подробнее о различиях между DynamicResource и StaticResource см. В этом другом вопросе StackOverflow: В чем отличие StaticResource от DynamicResource в WPF?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...