代码之家  ›  专栏  ›  技术社区  ›  Siegfried.V

当前ListView行的WPF绑定属性

  •  0
  • Siegfried.V  · 技术社区  · 6 年前

    我正在尝试实现 TreeView 在我的内心 ListView .

    我希望我的树盒子的背景和它的“父亲”行一样。 我想有可能将它的background属性绑定到它的行的background属性,但是怎么做呢?

    下面是一张图片来解释这个问题:

    选择第1行 第二行结束

    TreeViewInListView

    我还把我的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>
                ...
    

    编辑:

    最后,输入“transparent”并不能完全解决问题,有时它可以工作,但有时在选择TreeView时,它似乎被选中了,我得到以下结果:

    enter image description here

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

    enter image description here

    我希望树视图可以作为行中的任何元素,因为我找到的唯一方法是在每个元素上添加 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;
        }
    }
    

    不知道有没有更简单的方法,但这就是我到现在为止所发现的。

    2 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    尝试设置 Background 性质 TreeView Transparent :

    <TreeView Background="Transparent">
    
        2
  •  0
  •   Siegfried.V    6 年前

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

    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>