gpt4 book ai didi

c# - 是否可以继承 XAML?

转载 作者:行者123 更新时间:2023-12-04 02:24:34 29 4
gpt4 key购买 nike

我有继承一个基类的用户控件,如下所示:

BasePage.cs:

using System.Windows.Controls;

namespace TestPageManager23434
{
public class BasePage : UserControl
{
public string ButtonPreviousText { get; set; }
public string ButtonNextText { get; set; }

protected PageManager pageManager;

public BasePage(PageManager pageManager)
{
this.pageManager = pageManager;
}
}
}

用户控件如下所示:

XAML:
<local:BasePage x:Class="TestPageManager23434.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:TestPageManager23434"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Background="White"
Width="400"
Height="400"
>
<TextBlock Text="this is page1"/>
<TextBlock Text="{Binding Message}"/>
<Button Content="go to page 2" Click="Button_Click"
HorizontalAlignment="Left"
Width="200"
Height="30"
/>
</StackPanel>
</local:BasePage>

隐藏代码:
using System.Windows.Controls;

namespace TestPageManager23434
{
public partial class Page1 : BasePage
{
public string Message { get; set; }

public Page1(PageManager pageManager) : base(pageManager)
{
InitializeComponent();
DataContext = this;
}

private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
pageManager.SwitchPage("page2");
}
}
}

但是现在在我的各种用户控件的 XAML 部分中,我也有 XAML block 我也想 继承 来自基类,这样我就不会在每个 XAML 文件中复制此 block :
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Left">
<Button
Content="{Binding ButtonPreviousText}"
Width="150"
Margin="5"
Click="ButtonPrevious_Click"/>
<Button
Content="{Binding ButtonNextText}"
Width="150"
Click="ButtonNext_Click" Margin="5"/>
</StackPanel>

但由于我的基类没有 XAML,我看到了两种方法:
  • 在我的基类
  • 的代码中创建它们
  • 为他们创建用户控件

  • 或者是否有另一种方法可以将这个 XAML 放在一个位置或以某种方式继承 XAML?

    最佳答案

    我建议阅读 WPF Control Authoring Overview在 MSDN 上。我认为您将无法通过 UserControls 实现您想要做的事情。 UserControls 几乎意味着将一组特定的控件粘合在一起,以便在单个应用程序的范围内一致地重用它们。它们真的不应该被继承。

    您可以做的一件事是以一种“MasterPage”方式使用它们(如果您熟悉 ASP.NET)。您可以将 ContentControls 放在“基本”用户控件中,并公开不同的属性,从而允许其他人将内容注入(inject)基本控件的标准布局。这样,您的其他 UserControl 将“基础”UserControl 作为自己内部的根元素,并将各种内容属性设置为他们想要的任何元素。

    关于c# - 是否可以继承 XAML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1571179/

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