【问题标题】:How to access controls parent's property in a style如何以样式访问控件父级的属性
【发布时间】:2013-04-20 06:49:09
【问题描述】:

我的列表视图将项目数据模板化为标签。我正在为该标签设计一种样式,但我不知道如何访问父级的 (ListViewItem) IsSelected 属性。

编辑 - 尝试了以下建议,但仍然出现异常,这是我的完整代码:

 <Style x:Key="ListViewItemStyle" TargetType="ListViewItem">
                <Setter Property="SnapsToDevicePixels" Value="true"/>
                <Setter Property="OverridesDefaultStyle" Value="true"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListViewItem">
                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                                <GridViewRowPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="{StaticResource WindowBorderBrush}"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
            <Style x:Key="GVLabelStyle"
                   BasedOn="{StaticResource LabelStyle}"
                   TargetType="Label">
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition  Property="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor}}" Value="True"/>
                        </MultiDataTrigger.Conditions>            
                        <Setter Property="Foreground" Value="White"/>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>

            <DataTemplate x:Key="appTemplate">
                <Label Style="{StaticResource GVLabelStyle}"
                       Content="{Binding ProcessInfo.ProcessName}">
                               </Label>
            </DataTemplate>  

 <ListView Background="Transparent"
                  Name="mainContentHolder"
                  ItemsSource="{Binding}"
                  BorderBrush="Transparent"
                  ItemContainerStyle="{StaticResource ListViewItemStyle}">
                <ListView.View>
                <GridView ColumnHeaderContainerStyle="{StaticResource HeaderStyle}">
                    <GridViewColumn Header="Application" 
                                    CellTemplate="{StaticResource appTemplate}"/>
                    <GridViewColumn Header="Window Title"
                                    CellTemplate="{StaticResource wndTemplate}"
                                    Width="300"/>
                    <GridViewColumn Header="Date"
                                    CellTemplate="{StaticResource dateTemplate}"/>

                </GridView>
            </ListView.View>

        </ListView>

【问题讨论】:

    标签: c# wpf xaml listview multidatatrigger


    【解决方案1】:

    你应该可以使用RelativeSource:

    <Condition Property="{Binding Path=IsSelected, RelativeSource={RelativeSource TemplatedParent}}" Value="True" />
    

    编辑: 尝试使用MultiDataTrigger 而不是MultiTrigger。检查this

    【讨论】:

    • 我试过了,但得到了这个异常:不能在“条件”类型的“属性”属性上设置“绑定”。只能在 DependencyObject 的 DependencyProperty 上设置“绑定”。
    • 我想你可以使用RelativeSource={RelativeSource FindAncestor} 来找到确切的ListView?
    • 这样我得到了以下异常:'System.Windows.Data.RelativeSource'的初始化引发了异常。行号“38”和行位置“37”。
    • 好的,让它工作......谢谢......现在工作...... MultiDataTrigger.Conditions>
    【解决方案2】:

    ListView 有单独的SelectedItemTemplate。所以你可以使用它。

    【讨论】:

      【解决方案3】:

      为了节省您的时间,发布对我和 OP 都有效的语法: {绑定RelativeSource={RelativeSource AncestorType={x:Type ParentType}}, Path=ParentProperty}

      【讨论】:

        猜你喜欢
        • 2021-10-31
        • 2023-03-28
        • 1970-01-01
        • 2021-01-22
        • 1970-01-01
        • 2022-01-18
        • 2021-11-05
        • 2019-01-16
        • 1970-01-01
        相关资源
        最近更新 更多