首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TemplatedParent在MultiBinding中不起作用:每次都获取"UnsetValue“

在WPF(Windows Presentation Foundation)中,TemplatedParent是一个特殊的绑定源对象,它用于在自定义控件模板中引用控件的父级元素。然而,在MultiBinding中使用TemplatedParent时可能会遇到问题,导致无法正确获取值并返回"UnsetValue"。

这个问题通常发生在以下情况下:

  1. 当使用TemplatedParent作为MultiBinding的绑定源时,父级元素的属性可能还没有被正确设置,导致无法获取有效的值。
  2. 当使用TemplatedParent作为MultiBinding的绑定源时,父级元素的属性可能会在绑定发生之前被更改,导致无法获取正确的值。

为了解决这个问题,可以尝试以下几种方法:

  1. 使用RelativeSource指定FindAncestor模式,以确保正确获取父级元素。例如:
代码语言:txt
复制
<MultiBinding>
    <MultiBinding.Bindings>
        <Binding Path="SomeProperty" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type SomeParentType}}" />
        <Binding Path="AnotherProperty" />
    </MultiBinding.Bindings>
    <MultiBinding.Converter>
        <local:YourConverter />
    </MultiBinding.Converter>
</MultiBinding>

在这个例子中,通过RelativeSource指定了FindAncestor模式,并指定了父级元素的类型SomeParentType。

  1. 在控件模板中使用TemplateBinding而不是MultiBinding。TemplateBinding是一种特殊的绑定方式,它可以直接引用控件模板中的属性。例如:
代码语言:txt
复制
<ControlTemplate TargetType="{x:Type YourCustomControl}">
    <Grid>
        <TextBlock Text="{TemplateBinding SomeProperty}" />
    </Grid>
</ControlTemplate>

在这个例子中,使用TemplateBinding直接引用了控件模板中的SomeProperty属性。

  1. 如果以上方法无法解决问题,可以考虑使用其他的绑定方式,如ElementName绑定或Source绑定,以确保正确获取值。

总结起来,当在MultiBinding中使用TemplatedParent时不起作用时,可以尝试使用RelativeSource的FindAncestor模式来获取父级元素,或者考虑使用TemplateBinding直接引用控件模板中的属性。如果仍然无法解决问题,可以尝试其他的绑定方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DependencyProperty.UnsetValue 的正确打开方式

DependencyProperty.UnsetValue 的定义,只是为了让大家调试的时候显示 DependencyProperty.UnsetValue 而已。...但是有人会问:null 调试的时候也会显示 null 啊,为啥不用 null,要特别准备一个值呢? 这是因为绑定,null 可能是一个合理的值,可能会被故意用在绑定来达到某种目的。...此时获取依赖属性的值时拿到的便是 DependencyProperty.UnsetValue。...如果没有设置值,那么 GetValue 会返回更低优先级的值,一般情况下是依赖项属性注册时的默认值;但 ReadLocalValue 就是获取显式设置的那个值,如果没设,就只能是 DependencyProperty.UnsetValue...when converting a value in a MultiBinding?

94030
  • WPF 布局 在有限空间内让两个元素尽可能撑开的例子

    我的需求是假如账号的长度较短的时候,将剩余的空间尽可能给到密码的显示。反过来,密码长度比较短的时候,将剩余的空间给到账号的显示。...如果两者的长度都比较长,那么同时限制两者的最大尺寸 有以下的不同的情况的需求 账号和密码的长度较短,可以完全显示 账号较长,密码较短,但合起来的长度小于最大尺寸。...FontSize="14" TextTrimming="CharacterEllipsis"> <MultiBinding...total : 0; } return DependencyProperty.UnsetValue; } public...,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,命令行里面输入以下代码,即可获取到本文的代码 git init git remote add origin https://gitee.com

    33230

    WPF依赖属性的正确学习方法

    前言 我在学习WPF的早期,对依赖属性理解一直非常的不到位,其恶果就是,我每次写依赖属性的时候,需要翻过去的代码来复制黏贴。...其结果就是,你要和我当初一样,每次定义依赖属性,都要去复制黏贴。...KButtion,我们定义了四个依赖属性: ForeImageProperty:按钮的前景图片。 BackImageProperty:按钮的背景图片。...其中需要注意的是,模板绑定自定义依赖属性,是使用RelativeSource.TemplatedParent的,如{Binding ForeImage, RelativeSource={x:Static...可以看到,我们成功主页面设置了用户控件的依赖属性,并让他成功的绑定到了用户控件的TextBlock的Text属性。也就是说,我们简单的实现了Header的Title动态设置。

    2K10

    dotnet 读 WPF 源代码笔记 提升调试效率的 NamedObject 类型

    本文来聊聊 WPF 那些值得称赞的设计的 NamedObject 类型。 WPF ,有很多值得我学习的设计开发思想,其中就包括本文将要介绍的 NamedObject 类型。...原因是 WPF ,有某些地方的逻辑需要用到一个空的 Object 对象,而此对象不是用来做类里面的内部锁的信息,此空对象将会在框架层传输。...DependencyProperty 里面,如果咱有某个未定义的依赖属性,或者说绑定或属性转换器里面失败时返回一个未定义的属性时,按照最佳实践,咱应该返回 DependencyProperty 的 UnsetValue...如果每次调试框架时需要执行如上步骤,通过 VisualStudio 的创建对象 Id 的功能才能进行调试,那小心键盘被 WPF 框架开发者砸了 古老的 WPF 框架开发大佬们给 DependencyProperty..."); 此时的优势在于当我拿到一个 object 对象的时候,可以 VisualStudio 里面快速看到此对象是一个带命名的 DependencyProperty.UnsetValue 对象,此时就可以快速了解到此对象的创建者以及业务意图

    56510

    模仿UWP的ProgressRing

    Windows 10ProgressRing十分常见,而且十分好用。它还支持自适应尺寸,紧凑的地方使用ProgressRing会给UI增色不少,而且不会显得格格不入: ?...其中一个原因是ProgressBar功能太多,而我很多时候只需要一个简单的显示正在等待的元素,另一个原因是条状的ProgressBar紧凑的地方不好看,所以才需要结构相对简单的ProgressRing...Active状态下有5个Ellipse 不停旋转,或者说做绕着中心点做圆周运动,而为了不需要任何计算圆周中心点的代码,ProgressRing给每个Ellipse外面套上一个Canvas,让这整个Canvas...自适应大小 为了让ProgressRing各个Ellipse都可以自适应大小,ProgressRing提供了一个TemplateSettings属性,类型为TemplateSettingValues,...正确的做法是将计算尺寸及改变尺寸的操作放到最初的MeasureOverride。 5.

    72720

    New UWP Community Toolkit - ImageEx

    ImageEx 是一个图片的扩展控件,包括 ImageEx 和 RoundImageEx,它可以异步加载图片源时显示加载状态,也可以加载前使用占位图片,在下载完成后可以应用内缓存,避免了重复加载的过程...我们来看一下官方的介绍和官网示例的展示: ?...Stretch - 获取或设置控件的拉伸属性 CornerRadius - 获取或设置控件的圆角半径,用于 Rounded 或 Circle 图片控件 DecodePixelHeight - 获取或设置控件的解码像素高度...DecodePixelType - 获取或设置控件的解码像素类型 DecodePixelWidth - 获取或设置控件的解码像素宽度 IsCacheEnabled - 获取或设置缓存是否可用 另外还定义了...,图二是正常显示的状态;如果 Source 设置有误,则会出现图三只显示 PlaceHolder 的情况,实际应用图片加载失败时我们应该有对应的显示方法; <controls:ImageEx Name

    99470

    UWP WinUI 制作一个路径矢量图标按钮样式入门

    咱的应用程序里面,可以使用这些矢量图作为按钮的图标,从而更好的进行表意,让界面有更好的设计。...且有些界面效果是追求界面像,而不追求逻辑合理,即只要界面像就好更重要,当然,能两者兼顾那是最好的。放心,本文提供的方法还是两者兼顾的。那是否只有本文介绍的附加属性的方法才是最佳实践?...},Path=(local:ButtonHelper.ButtonPath)}"> 如果大家看了本文的内容不知道代码写在哪,可以到本文末尾获取所有代码的下载方法,拉取我的代码跑跑看 通过以上代码...,只需简单的代码就可以让按钮工作起来了 如果刚好有一组按钮需要做相同的鼠标移动到按钮上的 Hover 颜色画刷更改,可以再定义一个新的样式,继承 Style.Button.PathButton 样式,...,进入 UnoDemo/PathButtonDemo 文件夹,即可获取到源代码 更多 UWP 或 WinUI3 或 UNO 开发教程,请参阅 博客导航

    10410

    从 WPF 搬迁到 UOS 下的 UNO 的笔记

    需要在开发的过程进行 git 上传之前,看一下 csproj 的变更是否必要,如果是不必要的改动,请直接撤销。...当窗口的main线程空闲且队列没有挂起的输入时,将处理委托。 Low -1 低优先级。 如果队列没有更高的优先级事件挂起,则处理委托。 Normal 0 正常优先级。...大部分情况下使用的都是 Normal 优先级 但是 WinUI 3 运行的时候,可能 CoreApplication.MainView.CoreWindow 属性的获取会抛出不能重复创建的异常。...存起来,如此获取到相同的从主 UI 线程获取的 DispatcherQueue 对象即可同时 WinUI 3 以及 WPF 和 GTK 项目上使用。...设置 Opacity="0" 效果和 WPF 的 Visibility.Hidden 相似 MultiBinding 多绑定不受支持,只能绕路,让界面编写只有单绑定 ControlTemplate.Triggers

    75010

    WPF|快速添加新手引导功能(支持MVVM)

    并且提示框显示的位置还跟随目标控件主窗体的位置灵活变换,不至于显示蒙版窗体之外,如下图所示: 当目标控件右侧空间足够显示引导提示框时,引导提示框就显示目标控件右侧;右侧空间不足时,则将引导提示框显示目标控件左侧...Center" VerticalAlignment="Center" Content="点击测试新手引导"> <MultiBinding...GuideControl:引导控件,用于目标控件无法获取到自己的窗体这种(即无法获取在窗体的位置),比如您开发的程序为第三方程序插件这种,上面的代码即是使用此引导控件实现的效果。...b) GuideControl 和 GuideWindow GuideControl 是用于显示包含目标控件的容器内使用的,GuideControl放置的容器不一定是目标控件的直接容器,可以有嵌套,比如目标控件...,Show()目标控件窗体上,不能使用ShowDialog()的方式(为啥?

    2.5K10

    WPF 列表控件数据源绑定多个数据集合方法

    咱需要将两个 ObservableCollection 对象作为数据源,放在相同的一个 ListBox 里面 下面是多个不同的实现方式,解决如何在 WPF ListBox 或 ListView 绑定多个数据集合...原因是资源本身定义 Resources 里面。为什么资源需要定义控件里面的 Resource 里面?原因是为了获取到控件的 x:Reference 对象。...也就是说需要在控件创建出来之后,才能通过 x:Reference 获取控件,而控件的数据内容需要依赖资源的定义,因此也只有以上方式的写法 如果能从控件的上层容器拿到数据对象,那可以将资源定义容器里面,...CompositeCollectionConverter 转换器,实现逻辑是通过多绑定的方法,将多个数据集合当成多个参数进行绑定 </MultiBinding

    3.5K21
    领券