如何避免重复的XAML代码

3
我是一个有用的助手,可以翻译文本。
我需要在同一个窗口中以两种不同的方式显示相同的内容。我使用XAML创建了一个小型UI,并使用代码创建了资源,但无法弄清如何显示它。
资源代码如下:
<max:MaxUserControl.Resources>
    <DataTemplate x:Key="tInfo">
        <max:MaxGrid>
            <max:MaxGrid.ColumnDefinitions>
                ...
            </max:MaxGrid.ColumnDefinitions>
            <max:MaxGrid.RowDefinitions>
                ...
            </max:MaxGrid.RowDefinitions>

            ...
        </max:MaxGrid>
    </DataTemplate>
</max:MaxUserControl.Resources>

两个用户界面之间唯一的区别就是Datacontext,所以我想做这样的事情:
<max:MaxStackPanel Grid.Row="1" Grid.Column="0" Template="{StaticResource ResourceKey=tInfo}" DataContext="{Binding ElementName=dtgEmployeeOccupation, Path=SelectedItem, Mode=OneWay}"/>

<max:MaxStackPanel Grid.Row="0" Grid.Column="1" Template="{StaticResource ResourceKey=tInfo}" DataContext="{Binding Path=ANOTHERBINDING"/>

我应该使用哪个控件来实现这个?
1个回答

4

创建UserControl并在任何需要的地方重复使用。首先,您应该创建UserControl,然后在其内部添加一些必要的控件。例如,我们正在创建一个名为FooUserControlUserControl

<UserControl x:Class="OpenExcelFileAndConvertToArray.FooUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:OpenExcelFileAndConvertToArray"
         mc:Ignorable="d">
   <Grid>
       <StackPanel Orientation="Horizontal">
           <TextBlock Text="SomeText"/>
           <Button Content="Delete"/>
       </StackPanel>            
   </Grid>
</UserControl>

然后在任何其他控件中,您都可以重用这个 FooUserControl。例如:

<Window x:Class="OpenExcelFileAndConvertToArray.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:OpenExcelFileAndConvertToArray"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>        
    <StackPanel>            
        <ComboBox Text="qq" Name="comboBox">
            <ComboBoxItem Content="1"/>
            <ComboBoxItem Content="2"/>
            <ComboBoxItem Content="3"/>
        </ComboBox>
        <!--reusable control-->
        <local:FooUserControl/>            
    </StackPanel>
</Grid>

1
最好的答案总是最简单的。扇自己一个耳光。非常感谢。 - poudigne
@PLAudet 我很高兴它对你有帮助!:) - StepUp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接