当前位置: 首页 > 知识库问答 >
问题:

树视图项中的绑定错误(水平和垂直内容对齐)

白文彬
2023-03-14

我得到这些错误。我读了几个帖子,我的TreeViewItem确实定义了Horizontal和VerticalContentAlignment。有趣的是。NET 4.0让这个错误消失了(我使用3.5 -否则我会遭受这个https://connect . Microsoft . com/visual studio/feedback/details/588343/changed-behavior-from-NET-3-5-to-NET-4-0-of-wpf-textbox-formatting-when-proper)

系统。Windows.Data错误:4:找不到引用为“RelativeSource FindAncestor,ancestor type =”System的绑定的源。Windows.Controls.ItemsControl ',AncestorLevel='1 ' '。binding expression:Path = horizontal content alignment;DataItem = null目标元素是“TreeViewItem”(名称=“”);目标属性为“HorizontalContentAlignment”(类型为“HorizontalAlignment”)

系统.Windows。数据错误:4:无法找到引用“RelativeSource FindAncestor,AncestorType=”System.Windows.Controls的绑定源。ItemsControl',AncestorLevel=“1”。BindingExpression:路径=VerticalContentAlignment;数据项=空;目标元素是“TreeViewItem”(名称=“”);目标属性是“VerticalContentAlignment”(类型为“Vertical Alignment)

<!-- TreeViewItem templates (full length parent items) -->
        <Style x:Key="TreeViewItemStyleBase" TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded" Value="True"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TreeViewItem}">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition MinWidth="19" Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="5"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition/>
                            </Grid.RowDefinitions>
                            <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
                            <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
                                <ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            </Border>
                            <ItemsPresenter x:Name="ItemsHost" Grid.Column="1" Grid.Row="1"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsExpanded" Value="False">
                                <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
                            </Trigger>
                            <Trigger Property="HasItems" Value="False">
                                <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" TargetName="Bd" Value="{StaticResource CustomLightHighlight}"/>
                                <Setter Property="Foreground" Value="{StaticResource CustomWhite}"/>
                            </Trigger>                            
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="Foreground" Value="{StaticResource CustomGray}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>            
        </Style>

    <!-- Data templates-->
        <HierarchicalDataTemplate x:Key="RealTemplate" DataType="{x:Type l:Account}" ItemsSource="{Binding Path=children}">
            <DockPanel LastChildFill="True">
                <TextBlock x:Name="AccountTitle" Text="{Binding Path=title}" Foreground="White" DockPanel.Dock="Left"/>
                <TextBox x:Name="EditAccountTitle" Text="{Binding Path=title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource RoundedTextBox}" FontWeight="Bold" LostFocus="tvLostFocus" PreviewKeyDown="tvKeyDown" LostKeyboardFocus="tvLostFocus" Visibility="Collapsed" DockPanel.Dock="Left" l:FocusExtension.IsFocused="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}}" CaretIndex="{x:Static sys:Int32.MaxValue}"/>
                <TextBlock Text="{Binding Path=amount}" Foreground="{Binding Converter={StaticResource GetColourConverterAmount}}" DockPanel.Dock="Right" TextAlignment="Right"/>                
            </DockPanel>
            <HierarchicalDataTemplate.Triggers>
                <DataTrigger Binding="{Binding Path=isEditable}" Value="True">
                    <Setter TargetName="AccountTitle" Property="Visibility" Value="Collapsed"/>
                    <Setter TargetName="EditAccountTitle" Property="Visibility" Value="Visible"/>                                        
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=isEditable}" Value="False">
                    <Setter TargetName="AccountTitle" Property="Visibility" Value="Visible"/>
                    <Setter TargetName="EditAccountTitle" Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource TreeViewTopItemConverter}}" Value="False">
                    <DataTrigger.Setters>
                        <Setter Property="ContextMenu" Value="{StaticResource RealAccountMenu}"/>
                    </DataTrigger.Setters>
                </DataTrigger>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource TreeViewTopItemConverter}}" Value="True">
                    <DataTrigger.Setters>
                        <Setter Property="ContextMenu" Value="{StaticResource CategoryMenu}"/>
                    </DataTrigger.Setters>
                </DataTrigger>
            </HierarchicalDataTemplate.Triggers>
        </HierarchicalDataTemplate>

<!-- TreeViewItem styles - these styles defined here as reference code -->        
        <Style x:Key="TreeViewItemStyleReal" BasedOn="{StaticResource TreeViewItemStyleBase}" TargetType="{x:Type TreeViewItem}">
            <Setter Property="HeaderTemplate" Value="{StaticResource RealTemplate}"/>
            <Setter Property="IsExpanded" Value="{Binding isNodeExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
            <Setter Property="IsSelected" Value="{Binding isNodeSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>

            <!-- Events -->
            <EventSetter Event="TreeViewItem.MouseDoubleClick" Handler="tvShowItems"/>
            <EventSetter Event="TreeViewItem.PreviewMouseLeftButtonDown" Handler="tvMouseDown"/>
            <EventSetter Event="TreeViewItem.PreviewMouseRightButtonUp" Handler="tvMouseRightDown"/>
            <EventSetter Event="TreeViewItem.PreviewMouseMove" Handler="tvMouseMove"/>
            <EventSetter Event="TreeViewItem.Drop" Handler="tvDrop"/>                        
            <EventSetter Event="TreeViewItem.Expanded" Handler="tvExpanded"/>
            <EventSetter Event="TreeViewItem.Collapsed" Handler="tvCollapsed"/>
        </Style>

我错过了什么??

谢谢Andy

共有1个答案

窦伟
2023-03-14

我想出了答案。我没有正确地在集合中实现INotify属性更改,因此使用集合视图刷新刷新(这导致了树视图的重新绘制),我认为这一定破坏了绑定。自从正确地实现通知后,问题就解决了

 类似资料:
  • 所以我在垂直ScrollView中有一个水平回收器视图。我的布局中的所有内容都显示得很好,并且都按照我想要的方向滚动,并且它做得很好。 我唯一的问题是,RecyclerView位于ScrollView中其他内容的下方,当RecyclerViewer部分可见时,它会在启动时将RecyclerView的底部与屏幕的底部对齐。这意味着RecyclerView上方的内容被推离屏幕。 有谁知道为什么会发生这

  • 问题内容: 嗨,我想放置一个图像,该图像的垂直和水平居中对齐,我的HTML标记是 完成所有这些操作后,我将无法执行操作。请看一下并帮助我。 问题答案: 有几种方法可以使元素水平和垂直居中,这取决于情况和您的喜好。 使用以下标记: 行高 好的快速修复方法,不会使您太费时间,但是如果实际上将文本居中,则可能会出现问题。 显示:表格单元 就像好的旧表一样工作并且高度灵活,但是仅在现代浏览器中受支持。 位

  • 问题内容: 我有一个页面,其中仅存在表单,并且我希望将表单放置在屏幕的中央。 该对齐表格水平,但我无法弄清楚如何垂直对齐。我已经尝试使用和,但是它不起作用。 我想念什么? 问题答案: 更新2019 - Bootstrap 4.3.1 有 没有必要 进行 额外的CSS 。Bootstrap中已经包含的内容将起作用。确保表格的容器为 全高 。Bootstrap4现在具有100%高度的类… 垂直中心:

  • 问题内容: 我正在练习CSS,却对如何强制将元素置于页面的中心(和)感到困惑(这意味着跨浏览器兼容性的一种或多种方式)? 最好的祝福! 问题答案: 有很多方法: 使用固定尺寸使元素的水平和垂直居中对齐 CSS 2。水平和垂直居中一行文本 CSS 3。没有特定度量的元素的水平和垂直居中对齐 CSS

  • 问题内容: 如何使用flexbox在容器内水平和垂直居中div。在下面的示例中,我希望每个数字都彼此相邻(按行),并水平居中。 问题答案: 我认为您想要以下内容。 你的元素应该是块级(而非)如果你想要的高度和顶部/底部填充,以正常工作。 另外,在上,将宽度设置为而不是。 您的属性很好。 如果您希望垂直居中于视口中,请为和分配100%的高度,然后将页边距清零。 请注意,需要一个高度才能看到垂直对齐效

  • 如何使用FlexBox在容器内水平和垂直地居中div。在下面的例子中,我希望每一个数字在彼此下面(在行中),水平居中。 null null http://codepen.io/anon/pen/zlxbo