ControlTemplate.Trigger永远不会在Datagrid Cell Focus上触发

时间:2013-06-25 12:41:52

标签: wpf xaml wpf-4.0 app.xaml

<Style x:Key="Body_Content_DataGrid_Centering" TargetType="{x:Type DataGridCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center" />
                </Grid>

                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True">
                        <Setter Property="BorderBrush" Value="DarkGray" />
                        <Setter Property="BorderThickness" Value="0.5" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>               
    </Setter>              
</Style>

我在App.xaml文件中包含了上述代码。但触发器功能永远不会在DataGrid单元焦点上触发。谁能解释为什么会这样?

1 个答案:

答案 0 :(得分:1)

尝试使用 FocusVisualStyle 。有了它,您可以设置焦点框架和其他值。

样品:

<!-- CellFocusVisual -->
<Style x:Key="CellFocusVisual" TargetType="{x:Type Control}">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Control}">
               <Border SnapsToDevicePixels="True" CornerRadius="0" BorderThickness="2" BorderBrush="#7B2F81" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!-- DataGridCell -->
<Style TargetType="{x:Type DataGridCell}">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="BorderBrush" Value="{x:Null}" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource CellFocusVisual}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                 <Border x:Name="BackgroundBorder" BorderThickness="3" Background="Transparent">
                     <ContentPresenter VerticalAlignment="Center" Margin="4,0,6,0" />
                 </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

焦点是不同的。有关详细信息,请参阅link