Как скруглить углы для ListViewItem - PullRequest
1 голос
/ 04 апреля 2011

Я пытаюсь получить закругленные углы для выделенного и выделенного фона 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>

Однако по какой-то причине это только округляет левую сторонуи не тот, кто ищет помощь в том, как скруглить все 4 угла.

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Если я использую вышеуказанный XAML в новом окне, он прекрасно работает для меня:

enter image description here

Возможно ли, что правая часть вашего ListView не отображается какожидается?Возможно, привязанная ширина сетки немного больше, чем элемент управления, на котором она размещена.

0 голосов
/ 04 апреля 2011

мои столбцы создаются динамически в коде

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 сторонах (это не идеально, мне нужно, чтобы представление списка было динамичным)

...