簡體   English   中英

listview子項上的樣式觸發器

[英]style trigger on listview subitem

我有一個ListView ,它是數據綁定的,可以根據進來的某些屬性對項目的行進行顏色編碼。所有這些都按預期工作。

我想重寫特定的單元格以基於不同的屬性更改其顏色。

ListView ....

<Grid>
    <ListView x:Name="dbItems" ItemsSource="{Binding itemList}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto">
        <ListView.Resources>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="Background" Value="{Binding connectionStatus, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource converter}}" />
            </Style>
            <!--<Style TargetType="{x:Type ListViewItem.}">
                <Setter Property="Background" Value="{Binding badSubItem, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource cellConverter}}" />
            </Style>-->
        </ListView.Resources>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
                <GridViewColumn Header="DESCRIPTION" DisplayMemberBinding="{Binding description}" />
                <GridViewColumn Header="RESOURCE" DisplayMemberBinding="{Binding resource}" />
                <GridViewColumn Header="SubItem" DisplayMemberBinding="{Binding subItemFound}" />
                <GridViewColumn Header="Count" DisplayMemberBinding="{Binding count}"/>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>

每行的初始顏色編碼由Converter處理。

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{

        switch ((Interfaces.Enum.Status)value)
        {
            case Interfaces.Enum.Status.Unknown:
                return Brushes.LightGray;
            case Interfaces.Enum.Status.Offline:
                return Brushes.Red;
            case Interfaces.Enum.Status.Online:
                return Brushes.Green;
            case Interfaces.Enum.Status.OnlineButNotInitialized:
                return Brushes.OrangeRed;
            default:
                return Brushes.LightGray;
        }
}

我希望使用另一個Converter來改變單元格的顏色...

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (!(bool)value)
            return Brushes.LightGreen;
        return Brushes.Yellow;
    }

問題出在注釋掉的樣式標簽(第二個ListViewItem樣式)中,因為這僅需要應用於特定的單元格(子項-bool),但是我似乎找不到正確的綁定類型。 任何人都可以在這方面幫助我,或者為我指出正確的方向來完成此任務...

用要綁定的屬性替換IsSomething

<Style x:Key="MyDataGridCell" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
            <Setter Property="Background" Value="White"/>
            <Setter Property="Foreground" Value="Black"/>
    <Style.Triggers>
        <Trigger Property="{Binding IsSomething}" Value="True">
            <Setter Property="Background" Value="Red"/>
            <Setter Property="Foreground" Value="White"/>
        </Trigger>
    </Style.Triggers>
</Style>

<DataGrid CellStyle="{StaticResource MyDataGridCell}" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM