如何在WPF数据网格中禁用文本块边框?

时间:2016-02-11 05:49:45

标签: wpf datagrid

enter image description here我在 DataGrid 中遇到 TextBlock 的问题。 我无法为 TextBlock 停用边框无属性,名称为 BorderThickness ,用于TextBlock。
           那么我们如何禁用 TextBlock的边框。

这里我要添加我的样本网格单元格样式

                               <DataGrid.CellStyle>
                                    <Style TargetType="DataGridCell">
                                        <Style.Triggers>                                               
                                            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                                                <Setter Property="BorderBrush" Value="DarkTurquoise" />
                                                <Setter Property="IsSelected" Value="True"/>
                                                <Setter Property="BorderThickness" Value="0"/>
                                            </Trigger>
                                        </Style.Triggers>
                                    </Style>
                                </DataGrid.CellStyle>

这里我要添加整个DataGrid代码

 <DataGrid Name="gridcancelled" ItemsSource="{Binding}" HeadersVisibility="None" IsReadOnly="True" AutoGenerateColumns="False" GridLinesVisibility="Horizontal" Background="White"  Cursor="Hand"  MouseLeftButtonDown="gridcancelled_MouseLeftButton" Loaded="gridcancelled_Loaded" PreviewKeyDown="gridcancelled_PreviewKeyDown" RowHeight="44.9" SelectedIndex="0" HorizontalGridLinesBrush="{StaticResource BlueGridLine}" VerticalGridLinesBrush="{StaticResource BlueGridLine}" BorderThickness="1.5,1,1,1" BorderBrush="Gray">

                                <DataGrid.CellStyle>
                                    <Style TargetType="DataGridCell">
                                        <Style.Triggers>                                               
                                            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                                                <Setter Property="BorderBrush" Value="DarkTurquoise" />
                                                <Setter Property="IsSelected" Value="True"/>
                                                <Setter Property="BorderThickness" Value="0"/>
                                            </Trigger>
                                        </Style.Triggers>
                                    </Style>
                                </DataGrid.CellStyle>

                                <DataGrid.Resources>
                                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="DarkTurquoise"/>
                                    <Style TargetType="{x:Type DataGridRow}">
                                        <Style.Triggers>
                                            <Trigger Property="IsMouseOver" Value="true">
                                                <Setter Property="Foreground" Value="White" />
                                                <Setter Property="Background" Value="DarkTurquoise" />
                                                <Setter Property="FontSize" Value="14"></Setter>
                                                <Setter Property="FontWeight" Value="Medium"></Setter>
                                            </Trigger>
                                            <Trigger Property="DataGridRow.IsSelected" Value="True">
                                                <Setter Property="Foreground" Value="White" />
                                                <Setter Property="Background" Value="DarkTurquoise" />
                                                <Setter Property="FontSize" Value="14"></Setter>
                                                <Setter Property="FontWeight" Value="Medium"></Setter>
                                            </Trigger>
                                        </Style.Triggers>
                                    </Style>
                                </DataGrid.Resources>

                                <DataGrid.Columns>
                                    <DataGridTextColumn Binding="{Binding billId}" Width="220">
                                        <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="VerticalAlignment" Value="Center" />                                         
                                            </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                        <DataGridTextColumn Binding="{Binding billDate}" Width="210" >
                                            <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="VerticalAlignment" Value="Center" />
                                                </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                    <DataGridTextColumn Binding="{Binding counterId}" Width="210">
                                        <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="VerticalAlignment" Value="Center" />
                                                </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                        <DataGridTextColumn Binding="{Binding cashierId}" Width="190" >
                                            <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="VerticalAlignment" Value="Center" />
                                                </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                        <DataGridTextColumn Binding="{Binding dueAmount, StringFormat={}{0:0.00}}" Width="172">
                                            <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="HorizontalAlignment" Value="Right" />
                                                <Setter Property="VerticalAlignment" Value="Center" />
                                                    <Setter Property="Margin" Value="0,0,60,0"/>                                                    
                                                </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                </DataGrid.Columns>
                            </DataGrid>

这里我要添加我的PreviewKeyDown事件代码

    private void gridcancelled_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Up)
        {
            e.Handled = true;
            if (gridcancelled.SelectedIndex == 0)
            {
                gridcancelled.SelectedIndex = gridcancelled.Items.Count - 1;
            }
            else
            {
                gridcancelled.SelectedIndex--;
            }
        }
        if (e.Key == Key.Down)
        {
            e.Handled = true;

            if (gridcancelled.Items.Count - 1 > gridcancelled.SelectedIndex)
            {
                gridcancelled.SelectedIndex++;
            }
            else if (gridcancelled.SelectedIndex == gridcancelled.Items.Count - 1)
            {
                gridcancelled.SelectedIndex = 0;
            }
        }
    }

请告诉我你的建议 在此先感谢。

2 个答案:

答案 0 :(得分:1)

您的问题出在FocusVisualStyle

   <DataGrid.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Style.Triggers>
                            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                                <Setter Property="BorderBrush" Value="DarkTurquoise" />
                                <Setter Property="IsSelected" Value="True"/>
                                <Setter Property="BorderThickness" Value="0"/>
                            </Trigger>
                        </Style.Triggers>
                        <Setter Property="FocusVisualStyle">
                            <Setter.Value>
                                <Style>
                                    <Setter Property="Control.Template">
                                        <Setter.Value>
                                            <ControlTemplate>
                                                <Rectangle Margin="-2" StrokeThickness="1" Stroke="Red"/>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGrid.CellStyle>

答案 1 :(得分:1)

更新:按以下方式更改您的代码:

private void gridcancelled_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Up)
        {               
            if (gridcancelled.SelectedIndex == 0)
            {
                gridcancelled.SelectedIndex = gridcancelled.Items.Count - 1;
                SetFocus(gridcancelled.SelectedIndex, gridcancelled.CurrentCell.Column.DisplayIndex);                    
            }
            else
            {
                gridcancelled.SelectedIndex--;
            }                
        }
        if (e.Key == Key.Down)
        {                
            if (gridcancelled.Items.Count - 1 > gridcancelled.SelectedIndex)
            {
                gridcancelled.SelectedIndex++;
            }
            else if (gridcancelled.SelectedIndex == gridcancelled.Items.Count - 1)
            {
                gridcancelled.SelectedIndex = 0;                   

                SetFocus(gridcancelled.SelectedIndex, gridcancelled.CurrentCell.Column.DisplayIndex);
            }               
        }
    }

    public void SetFocus(int SelectedIndex,int SelectedCellIndex)
    {
        var row = gridcancelled.ItemContainerGenerator.ContainerFromIndex(SelectedIndex) as DataGridRow;

        DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);

        var cell = presenter.ItemContainerGenerator.ContainerFromIndex(SelectedCellIndex) as DataGridCell;

        Keyboard.Focus(cell);
    }

    public T GetVisualChild<T>(Visual parent) where T : Visual
    {
        T child = default(T);
        int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < numVisuals; i++)
        {
            Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
            child = v as T;
            if (child == null)
            {
                child = GetVisualChild<T>(v);
            }
            if (child != null)
            {
                break;
            }
        }
        return child;
    }

<强>输出:

enter image description here