我在 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;
}
}
}
请告诉我你的建议 在此先感谢。
答案 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;
}
<强>输出:强>