WPF RelativeSource属性-目标对象类型易错

这篇具有很好参考价值的文章主要介绍了WPF RelativeSource属性-目标对象类型易错。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇转载了RelativeSource的三种用法,其中第二种用法较常见,这里记录一下项目中曾经发生错误的地方,以防自己哪天忘记了,又犯了同样错误—WPF RelativeSource属性-CSDN博客

先回顾一下:

控件关联其父级容器的属性——AncestorType

详细介绍下AncestorLevel,它指的是以Bingding目标控件为起点的层级偏移量,S1的偏移量是1,G2的偏移量是2,G1是偏移量3,AncestorType指的是要找的目标对象的类型。值得注意的是AncestorLevel必须参考AncestorType使用,如上面设置了AncestorType={x:Type Grid},则Bingding在寻找时会忽略非Grid的控件,此时G2的偏移量是1,G1的偏移量是2,StackPanel被忽略。

错误代码:

<TabControl>
    <TabItem
        Width="150"
        Height="30"
        Header="TabItem1"
        IsSelected="True">
        <ScrollViewer MaxHeight="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabItem, AncestorLevel=1}}">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid Grid.Row="0">
                    <TextBlock
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        FontSize="100"
                        Text="用户控件" />
                </Grid>
            </Grid>
        </ScrollViewer>
    </TabItem>
</TabControl>

Page界面显示效果:文字显示不全,只显示了高度为30的文字部分

WPF RelativeSource属性-目标对象类型易错,C#,wpf,c#

问题出在这句话:<ScrollViewer MaxHeight="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabItem, AncestorLevel=1}}">

AncestorType=TabItem,往上查找第一个TabItem控件,其Height="30",这样ScrollViewer的MaxHeight=30,直接造成显示不全

改前台代码AncestorType=TabControl,如下

<TabControl>
    <TabItem
        Width="150"
        Height="30"
        Header="TabItem1"
        IsSelected="True">
        <ScrollViewer MaxHeight="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabControl, AncestorLevel=1}}">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid Grid.Row="0">
                    <TextBlock
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        FontSize="100"
                        Text="用户控件" />
                </Grid>
            </Grid>
        </ScrollViewer>
    </TabItem>
</TabControl>

Page界面显示效果:文字显示完整,所以使用RelativeSource查找目标类型 AncestorType时,一定要仔细!

WPF RelativeSource属性-目标对象类型易错,C#,wpf,c#文章来源地址https://www.toymoban.com/news/detail-739029.html

到了这里,关于WPF RelativeSource属性-目标对象类型易错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • [WPF]浅析依赖属性(DependencyProperty)

    [WPF]浅析依赖属性(DependencyProperty)

    在WPF中,引入了依赖属性这个概念,提到依赖属性时通常都会说依赖属性能节省实例对内存的开销。此外依赖属性还有两大优势。 支持多属性值,依赖属性系统可以储存多个值,配合Expression、Style、Animation等可以给我们带来很强的开发体验。 加入了属性变化通知,限制、验

    2024年02月08日
    浏览(9)
  • WPF 入门笔记 - 05 - 依赖属性

    WPF 入门笔记 - 05 - 依赖属性

    如果预计中的不幸没有发生的话,我们就会收获意外的喜悦。 --人生的智慧 - 叔本华 这一部分是中途加的,直接依赖属性有点迷糊😪,正好有了绑定的基础,理解起来还一些。 WPF 提供一组服务,这些服务可用于扩展公共语言运行时 (CLR) 属性的功能。这些服务通常统称为

    2024年02月09日
    浏览(9)
  • WPF XAML中使用依赖属性

    自定义的控件 MyCustomControl ,它有一个依赖属性 MyProperty 。首先,我们需要在控件的代码文件中创建这个依赖属性: 在XAML文件中使用这个控件及其依赖属性: 在这个例子中, local 是XAML文件中定义的XML命名空间前缀, clr-namespace:WpfApp 指定了 MyCustomControl 定义所在的命名空间。

    2024年02月20日
    浏览(15)
  • 掌握WPF控件:熟练常用属性(一)

    掌握WPF控件:熟练常用属性(一)

    Border Border控件是一个装饰控件,用于围绕其他元素绘制边框和背景。它提供了一种简单的方式来为其他控件添加边框和背景样式,而无需自定义控件的绘制逻辑。 常用属性 描述 Background 用于设置背景颜色或图像。 BorderBrush 用于设置边框的边框颜色 CornerRadius 用于设置边框的

    2024年01月21日
    浏览(16)
  • WPF绑定与通知属性到界面

    本文同时为b站WPF课程的笔记,相关示例代码 在上一篇文章C#代码事件里面,我们介绍了利用给控件命名的方式,在后端代码中访问并修改属性。这样子直截了当,但是这样后端代码依赖于前端。如果前端的代码变动较大,后端代码可能要大面积重构。 于是利用绑定的这种方

    2024年01月25日
    浏览(8)
  • 掌握WPF控件:熟练常用属性(二)

    掌握WPF控件:熟练常用属性(二)

    Calendar 用于日期选择的控件。它提供了一个可视化的界面,可以通过它来选择特定的日期。 常用属性 描述 DisplayMode 用来设置Calendar的显示模式,有三种可选值:默认Month(月)、Year(年)和Decade(十年)。 SelectedDate 用来获取或设置当前选中的日期。 Mode 用来设置Calendar的显

    2024年01月20日
    浏览(21)
  • WPF中依赖属性及附加属性的概念及用法

    WPF中依赖属性及附加属性的概念及用法

    完全来源于十月的寒流,感谢大佬讲解 由依赖属性提供的属性功能 与字段支持的属性不同,依赖属性扩展了属性的功能。 通常,添加的功能表示或支持以下功能之一: 资源 数据绑定 样式 动画 元数据重写 属性值继承 WPF 设计器集成 TextBox HasText实现一 TextBox HasText只读实现二

    2024年02月05日
    浏览(15)
  • 按照Vue写WPF(1):属性绑定

    按照Vue写WPF(1):属性绑定

    作为一个使用Vue非常熟练的C#全干工程师。当我在接触WPF的时候,我就一直想用Vue的想法去重写WPF框架。经过一个星期的琢磨,终于琢磨出来了如何优雅的入参。期间看了上百篇博客,浏览了一堆的视频教程。 用户控件的cs TestController.xaml TestController.xaml.cs 用户控件的xaml Tes

    2024年02月15日
    浏览(12)
  • WPF自定义命令及属性改变处理

    WPF自定义命令及属性改变处理

    1、项目建构 2、自定义命令 3、属性改变 4、界面 5、后台代码 6、ViewModel代码

    2024年02月11日
    浏览(6)
  • WPF 数据绑定类属性 和数据更新

    WPF中数据绑定是一个非常强大的功能,不仅可以绑定后台数据,还可以进行实时更新。 在后台创建模型类,然后在标签页面进行导入并绑定。 // 实现数据更新需要再模型类里面添加INotifyPropertyChanged接口 // INotifyPropertyChanged 检查属性是否发生变化的接口 此方法在模型类数据变

    2024年04月15日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包