【问题标题】:collapsed a ListItem from a listView从 listView 折叠 ListItem
【发布时间】:2017-06-07 02:06:51
【问题描述】:

我有一个包含堆栈面板的列表视图。其中包含一个数据网格。

我希望用户点击一个复选框。 一些数据会崩溃。 (其余数据将上升)对于任何列表视图项

将获得一些有关代码示例的帮助:

附加一些我的 XAML 代码:

<Style x:Key="ShowHideStyle" TargetType="StackPanel" >
    <Style.Setters>
        <Setter Property="Visibility" Value="Collapsed" />
    </Style.Setters>
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Value="True">
                    <Condition.Binding>
                        <MultiBinding Converter="{StaticResource V_converter }">
                            <Binding Path="Type"></Binding>
                            <Binding Path="NodeID"></Binding>
                            <Binding Path="TLV"></Binding>
                        </MultiBinding>
                    </Condition.Binding>
                </Condition>
            </MultiDataTrigger.Conditions>

            <MultiDataTrigger.Setters>
                <Setter Property="Visibility" Value="Visible" />
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

<ListView x:Name="LV" ItemsSource= "{Binding  Lggv}" SelectionChanged="dataGridData_SelectionChanged" ItemContainerStyle="{StaticResource ListViewItemStyle}">
    <ListView.ItemTemplate>
        <DataTemplate x:Name="DT" >
            <StackPanel x:Name="LVSP" DataContextChanged="LVSP_DataContextChanged" SourceUpdated="LVSP_SourceUpdated" Style="{StaticResource ShowHideStyle}">
                <Border BorderThickness="1" BorderBrush="Black"  >
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="150"></ColumnDefinition>
                            <ColumnDefinition Width="55"></ColumnDefinition>
                            <ColumnDefinition Width="1*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <TextBlock x:Name="tbHeader" Text="{Binding Info }" AllowDrop="True"   FontWeight="Bold" Grid.Column="2" Visibility="{Binding Visibility_Header}" >

                            <TextBlock.Style>
                                <Style TargetType="TextBlock">
                                    <Setter Property="Background">
                                        <Setter.Value>
                                            <!-- this is the default background-->
                                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                <GradientStop Color="#FFCEE6C6" Offset="0.008"/>
                                                <GradientStop Color="#FF9ECF8C" Offset="0.987"/>
                                            </LinearGradientBrush>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                    </Grid>
                </Border>
                <Grid x:Name="GridData">
                    <Grid.Background>
                        <MultiBinding Converter="{StaticResource converter }">
                            <Binding Path="Type"></Binding>
                            <Binding Path="NodeID"></Binding>
                            <Binding Path="TLV"></Binding>
                        </MultiBinding>
                    </Grid.Background>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="150"></ColumnDefinition>
                        <ColumnDefinition Width="55"></ColumnDefinition>
                        <ColumnDefinition Width="1*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Border Grid.Column="0" BorderThickness="1" BorderBrush="Black">
                        <TextBlock Text="{Binding DateTime}"  ></TextBlock>
                    </Border>
                    <Border Grid.Column="1" BorderThickness="1" BorderBrush="Black">
                        <TextBlock Text="{Binding ComPort}"></TextBlock>
                    </Border>
                    <Border Grid.Column="2" BorderThickness="1" BorderBrush="Black">
                        <TextBlock Text="{Binding Data}" ></TextBlock>
                    </Border>
                </Grid>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

【问题讨论】:

  • 您希望标题始终可见吗?
  • 网格视图的标题或列表视图的标题
  • 我指的是 StackPanel 中的“标题”边框。
  • 可以删除的。

标签: c# wpf setter stackpanel multidatatrigger


【解决方案1】:

将 StackPanel 放入 Expander 并将样式应用于后者。

<ListView x:Name="LV" ItemsSource= "{Binding  Lggv}" SelectionChanged="dataGridData_SelectionChanged" 
                  ItemContainerStyle="{StaticResource ListViewItemStyle}">
    <ListView.ItemTemplate>
        <DataTemplate x:Name="DT" >
            <Expander Header="..." Style="{StaticResource ShowHideStyle}">
                <StackPanel x:Name="LVSP" DataContextChanged="LVSP_DataContextChanged" SourceUpdated="LVSP_SourceUpdated">
                    <Border...></Border...>
                    <Grid...></Grid...>
                </StackPanel>
            </Expander>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

您将 Expander 的 IsExpanded 属性设置为 false/true,而不是将 Visbility 属性设置为 Collapsed/Visible:

<Style x:Key="ShowHideStyle" TargetType="Expander" >
    <Style.Setters>
        <Setter Property="IsExpanded" Value="False" />
    </Style.Setters>
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Value="True">
                    <Condition.Binding>
                        <MultiBinding Converter="{StaticResource V_converter }">
                            <Binding Path="Type"></Binding>
                            <Binding Path="NodeID"></Binding>
                            <Binding Path="TLV"></Binding>
                        </MultiBinding>
                    </Condition.Binding>
                </Condition>
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="IsExpanded" Value="True" />
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

【讨论】:

  • 不,这不是我的意思是我想要可见的将被显示并上升!
【解决方案2】:

您应该为目标类型ListViewItem 设置ItemContainerStyle,而不是定位您的项目内容(StackPanel)。

在资源部分,定义你的风格

<Style x:Key="ShowHideStyle" TargetType="ListViewItem">
    ...
</Style>

那就用吧

<ListView ItemContainerStyle="{StaticResource ShowHideStyle}" .../>

当然,我假设您的转换器/触发器实际上正在工作,而您只是遇到了正确隐藏整个列表条目的问题。

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多