【问题标题】:WPF bind property of current ListView row当前 ListView 行的 WPF 绑定属性
【发布时间】:2019-02-13 03:00:59
【问题描述】:

我正在尝试在我的ListView 中实现TreeView

我希望我的 TreeBox 的背景与它的“父亲”行相同。 我想有可能将其 BackGround 属性绑定到其行的 BackGround 属性,但如何做到这一点?

这是解释问题的图片:

第一行被选中 第二行结束了

我还放了我的 XAML,以防万一:

<ListView x:Name="ListView4" SelectedItem="{Binding SelectedRepere}" ItemsSource="{Binding ListeDesReperes}"  Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4" MouseDoubleClick="ListView_MouseDoubleClick" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" ContextMenuOpening="ListView4_ContextMenuOpening" SelectionChanged="ListView4_SelectionChanged" Visibility="{Binding Grid4Visible, Converter={StaticResource BoolToVisConverter}}" >
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsUniqueGeometry}" Value="true">
                    <Setter Property="FontWeight" Value="Bold" />
                </DataTrigger>
            </Style.Triggers>

        </Style> 
    </ListView.ItemContainerStyle>
    <ListView.ContextMenu>
        <ContextMenu x:Name="Context4">
            <MenuItem x:Name="Context4MakeLonger" Header="{x:Static p:Resources.MakeLonger}" Click="Make_Longer"/>
            <MenuItem x:Name="Context4Distinguer" Header="{x:Static p:Resources.DistributeToAss}" Click="DistinguerDetailRepere"/>
            <MenuItem x:Name="Context4Search" Header="{x:Static p:Resources.Search}" Click="Search_Detail"/>
        </ContextMenu>
    </ListView.ContextMenu>
    <ListView.View>

        <GridView AllowsColumnReorder="true" x:Name="GridView4">
            <GridViewColumn DisplayMemberBinding="{Binding Path=ID}" Header="ID" Width="200"/>
            <GridViewColumn Header="Name">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TreeView BorderThickness="0" x:Name="treeviewList" ItemsSource="{Binding RepereTree}" Width="Auto">
                                <TreeView.ItemContainerStyle>
                                    <Style TargetType="{x:Type TreeViewItem}">
                                        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
                                        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
                                        <Setter Property="HorizontalAlignment" Value="Left"/>
                                    </Style>
                                </TreeView.ItemContainerStyle>
                                <TreeView.ItemTemplate>
                                    <DataTemplate>
                                        <TreeViewItem  ItemsSource="{Binding ListeSubReperes}">
                                            <TreeViewItem.Header>
                                                <Grid>
                                                    <TextBlock Foreground="#FF042271" Text="{Binding NameOri}" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0" Tag="{Binding Name}" MouseMove="mouseOverNameRepere" ToolTip="{Binding Path=ToolTipModifications}" MouseDown="TreeView_Main_Click"/>
                                                </Grid>
                                            </TreeViewItem.Header>
                                            <TreeViewItem.ItemTemplate>
                                                <DataTemplate>
                                                    <Grid Margin="-20,0,0,0">
                                                        <Grid.ColumnDefinitions>
                                                            <ColumnDefinition Width="Auto"></ColumnDefinition>
                                                            <ColumnDefinition Width="Auto"></ColumnDefinition>
                                                        </Grid.ColumnDefinitions>
                                                        <TextBlock Foreground="#FF042271" Text="{Binding Name}" Tag="{Binding IdRepereOri}" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0"MouseDown="TreeView_Sub_Click"/>

                                                    </Grid>
                                                </DataTemplate>
                                            </TreeViewItem.ItemTemplate>
                                        </TreeViewItem>
                                    </DataTemplate>
                                </TreeView.ItemTemplate>
                            </TreeView>
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            ...

编辑:

最后,设置“透明并不能完全解决问题,有时它可以工作,但有时在选择Treeview时,它似乎被选中了,我有以下结果:

然后当我取消选择它时,它会给出结果:

我希望 Treeview 可以作为我行中的任何元素,为此我发现的唯一方法是添加每个 TextBlock 一个 MouseDown 事件,然后我这样做:

private void TreeView_Main_Click(object sender, MouseButtonEventArgs e)
{
    TextBlock item = (TextBlock)sender;
    string name = (string)item.Text;
    Repere rep = contexte.ListeDesReperes.FirstOrDefault(x => x.Name == name);
    if (rep != null)
    {
        contexte.SelectedRepere = rep;
    }
}
private void TreeView_Sub_Click(object sender, MouseButtonEventArgs e)
{
    TextBlock item = (TextBlock)sender;
    long idOri = (long)item.Tag;
    Repere rep = contexte.ListeDesReperes.FirstOrDefault(x => x.ID==idOri);
    if (rep != null)
    {
        contexte.SelectedRepere = rep;
    }
}

不知道是否有更简单的方法可以做到这一点,但这就是我到目前为止发现的全部内容。

【问题讨论】:

    标签: c# wpf listview


    【解决方案1】:

    尝试将TreeViewBackground属性设置为Transparent

    <TreeView Background="Transparent">
    

    【讨论】:

    • 对不起,答案无效,但这并不能解决所有情况,我编辑了我的帖子
    • @Siegfried.V:一旦您的原始问题得到解答,请勿使用新信息编辑您的问题。如果您还有其他问题,请提出新问题。
    • 真的吗?即使是同一个问题/同一个问题?
    • 需要修改TreeView的高亮颜色。
    • 好的,所以我可以验证答案,并寻找如何更改突出显示,对吧?
    【解决方案2】:

    我把它放在这里是为了谁会来这里:

    how to change highlight values

    这里很好解释了什么是 SystemColors 参数,最后只需要添加:

    <TreeView.Resources>
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
       <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey }" Color="Transparent" />
       <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
    </TreeView.Resources>
    

    【讨论】:

      猜你喜欢
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2020-05-17
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多