Wpf 如何为ListViewItem创建圆角
我试图为ListViewItem的突出显示和选定背景设置圆角 我有以下代码:Wpf 如何为ListViewItem创建圆角,wpf,listviewitem,Wpf,Listviewitem,我试图为ListViewItem的突出显示和选定背景设置圆角 我有以下代码: <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStopCollection>
<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#F7D073" Offset="0"/>
<GradientStop Color="#F1A62F" Offset="1"/>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" StartPoint="0,0" EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#F7D073" Offset="0"/>
<GradientStop Color="#F1A62F" Offset="1"/>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<LinearGradientBrush x:Key="MouseOverBrush" StartPoint="0,0" EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#E4F0FD" Offset="0"/>
<GradientStop Color="#D7EAFD" Offset="1"/>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{Binding Path=NGGDataForeground, ElementName=NGG}" />
</Setter.Value>
</Setter>
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="{StaticResource MouseOverBrush}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Black" />
</Trigger>
</Style.Triggers>
<Style.Resources>
<Style TargetType="Border">
<Setter Property="CornerRadius" Value="2"/>
</Style>
</Style.Resources>
</Style>
<ListView x:Name="lstData" ItemsSource="{Binding ElementName=NGG}"
Height="{Binding Path=GridHight, ElementName=NGG}"
Width="{Binding Path=GridWidth, ElementName=NGG}"
BorderThickness="0" BorderBrush="Transparent">
</ListView>
然而,由于某些原因,这只会使左侧变圆,而不会使右侧变圆。请寻求有关如何使所有四个角变圆的帮助。如果我在新窗口上使用上述XAML,它对我来说效果很好:
是否可能ListView的右侧未按预期显示?可能绑定的GridWidth比它所在的控件大一点。我的列是在代码隐藏中动态创建的
public void PopulateGrid(DataSet ds) {
lstData.View = CreateGridViewColumns(ds.Tables[0]);
lstData.ItemsSource = ((IListSource) ds.Tables[0]).GetList();
}
public void PopulateGrid(DataTable dt) {
lstData.View = CreateGridViewColumns(dt);
lstData.DataContext = dt.DefaultView;
}
private GridView CreateGridViewColumns(DataTable dt) {
// Create the GridView
var gv = new GridView {AllowsColumnReorder = true};
// Create the GridView Columns
foreach (DataColumn item in dt.Columns) {
var gvc = new GridViewColumn
{
DisplayMemberBinding = new Binding(item.ColumnName),
Header = item.ColumnName,
Width = Double.NaN
};
gv.Columns.Add(gvc);
}
return gv;
}
我还注意到,如果我展开最后一列以显示水平滚动条,并且它有一个垂直条,那么右侧的角确实会显示出来
此外,如果我手动定义所有列,则圆角将再次显示在所有4个边上(这并不理想,因为我需要动态的列表视图)如果只有左侧获得圆角。。。然后问题可能是ListViewItems(及其圆角边框)比ListView容器宽。看看你是如何把东西绑定到一个名为NGG的元素上的。。。我认为您可能需要在中提供更多xaml,以确切了解ListViewItems太宽的原因。您完全正确(我的GridWidth属性太大)