Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何为ListViewItem创建圆角_Wpf_Listviewitem - Fatal编程技术网

Wpf 如何为ListViewItem创建圆角

Wpf 如何为ListViewItem创建圆角,wpf,listviewitem,Wpf,Listviewitem,我试图为ListViewItem的突出显示和选定背景设置圆角 我有以下代码: <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStopCollection>

我试图为ListViewItem的突出显示和选定背景设置圆角

我有以下代码:

<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属性太大)