gpt4 book ai didi

wpf - 当放置在 ContentControl 中时,控件的父级为空

转载 作者:行者123 更新时间:2023-12-05 08:12:14 26 4
gpt4 key购买 nike

我有一个派生自 ContentControl 的简单控件,它具有 3 个属性。

当我尝试使用放置在 MainContent 中的控件执行 control.TransformToVisual() 时,我的问题就来了。它总是会引发一个 ArgumentNullException

我猜这是因为控件的父属性为空。有没有简单的方法来解决这个问题?

C#

public static readonly DependencyProperty LabelTextProperty =
DependencyProperty.Register("LabelText", typeof(string), typeof(LabelledControl), null);

public static readonly DependencyProperty ValidationContentProperty =
DependencyProperty.Register("ValidationContent", typeof(object), typeof(LabelledControl), null);

public static readonly DependencyProperty MainContentProperty =
DependencyProperty.Register("MainContent", typeof(object), typeof(LabelledControl), null);

XAML

<Style TargetType="local:LabelledControl">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:LabelledControl">

<StackPanel Margin="0 10 0 0">
<StackPanel Orientation="Vertical">
<dataInput:Label Content="{TemplateBinding LabelText}" FontWeight="Bold" FontSize="12" IsTabStop="False"/>
<ContentControl Content="{TemplateBinding ValidationContent}" IsTabStop="False"/>
</StackPanel>
<ContentControl x:Name="_contentControl" Content="{TemplateBinding MainContent}" IsTabStop="False"/>
</StackPanel>

</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

最佳答案

您是否尝试过使用 ContentPresenter类而不是 ControlTemplate 中的 ContentControl 类来在模板中显示这些属性?我不确定它是否与您的 ArgumentNullException 相关,但通常 ContentControl 的内容通过 ContentPresenter 暴露在模板上。

由于您的控件派生自 ContentControl,因此 ContentPresenter 会自动为您将 Content 和 ContentTemplate 属性绑定(bind)到 Content 属性设置的任何值。您还可以手动将 ContentPresenter 的 Content 属性绑定(bind)到您的 ValidationContent 属性。

我不确定当基础 ContentControl 已经为您提供了一个要使用的 Content 属性时,您为什么要定义 MainContent 属性,也许这是您试图公开的第二部分内容。

关于wpf - 当放置在 ContentControl 中时,控件的父级为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3092864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com