在WPF中重构XAML

Vah*_*hid 6 c# wpf xaml

我的XAML很长很难维护.我想知道是否有办法做重构之类的事情?

这是一个简单的例子:

<Window x:Class="RefactorXAML.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <Button>New</Button>
            <Button>Open</Button>
        </StackPanel>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

我怎样才能重构该Stackpanel部分并写出这样的内容?

<Window x:Class="RefactorXAML.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        // Refactored Markup
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

pok*_*oke 14

您可以将这些按钮放在用户控件中,使其如下所示:

<Window …
        xmlns:my="clr-namespace:SomeNamespace">
    <Grid>
        <my:NewAndOpenButtons />
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

您还可以通过已包含这些按钮的项控件替换网格,但这样会对其他内容施加太多限制,因此我不会这样做.

因此,对于上述内容,您的用户控件将如下所示:

<UserControl x:Class="SomeNamespace.NewAndOpenButtons" …>
    <StackPanel>
        <Button>New</Button>
        <Button>Open</Button>
    </StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

  • @Vahid这是正确的,每个用户控件都是一个完全*独立的*控件,你无法访问它的内部(就像你无法访问按钮的内部).相反,如果您希望允许与"外部"进行通信,则可以定义(依赖性)属性,您可以将这些属性分配给外部. (2认同)