gpt4 book ai didi

WPF:从窗口继承

转载 作者:行者123 更新时间:2023-12-04 23:09:20 24 4
gpt4 key购买 nike

我似乎在创建派生自 System.Windows.Window 的自定义窗口类型时遇到了一些麻烦。似乎有两个问题正在发生。首先,有一个编译时错误说明

Cannot find the static member 'ContentProperty' on the type 'Control'



这是对自定义窗口的 ControlTemplate 中的 ContentPresenter 元素的引用(请参阅下面 BaseWindowResource.xaml 的代码示例)。我不知道为什么会发生这种情况,因为 BaseWindow 派生自 Window,因此必须具有 Content 属性...

第二个问题是,当派生自 BaseWindow 的 Window1 完成渲染时,我似乎无法触发 BaseWindow 的 ContentRendered 事件......我需要在 BaseWindow 中处理 ContentRendered 事件,因为处理程序将包含否则需要将大量代码复制到每个派生类中...

无论如何,这是代码。任何帮助都感激不尽!

干杯,

安德鲁

应用程序.xaml:
<Application x:Class="WpfApplication4.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>
<ResourceDictionary Source="/BaseWindowResource.xaml" />
</Application.Resources>
</Application>

基本窗口资源.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4">
<Style TargetType="{x:Type local:BaseWindow}" x:Key="BaseWindowStyleKey">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<Rectangle Margin="20" Fill="Green" x:Name="MyRect" />
<ContentPresenter Margin="30" x:Name="MyContentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>

基本窗口.cs:
    public class BaseWindow : Window
{
public BaseWindow()
{
Style = FindResource("BaseWindowStyleKey") as Style;

ContentRendered += new EventHandler(BaseWindow_ContentRendered);
}

void BaseWindow_ContentRendered(object sender, EventArgs e)
{
ContentPresenter contentPresenter = Template.FindName("MyContentPresenter", this) as ContentPresenter;

MessageBox.Show(String.Format("The dimensions for the content presenter are {0} by {1}",
contentPresenter.ActualWidth,
contentPresenter.ActualHeight));
}
}

Window1.xaml:
<local:BaseWindow x:Class="WpfApplication4.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4"
Title="Window1" Height="300" Width="300">
</local:BaseWindow>

最后是 Window1.xaml.cs:
public partial class Window1 : BaseWindow
{
public Window1()
{
InitializeComponent();
}
}

嗯,这就是所有的代码。它几乎隔离了问题。

干杯,

安德鲁

最佳答案

尝试指定如下类型:

Content="{TemplateBinding Window.Content}"

我认为第二个问题与第一个问题有关。如果此解决方案无法解决第二个问题,请在此处发表评论。

关于WPF:从窗口继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572304/

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