使用自定义控件删除重复的XAML代码?

时间:2018-04-24 23:54:16

标签: wpf xaml user-controls

什么是摆脱不同文件中重复XAML的好方法。示例:

                                                                                                            

            <StackPanel Grid.Row="8" Grid.Column="2" Style="{StaticResource ViewContentStyle}" Visibility="{Binding Type, Converter={StaticResource TypeToVisibility}}">
                <ctl:NewLabel LabelContent="{x:Static common:LocalResources.UNameLabel}" LabelStyle="{DynamicResource ContentLabelStyle}"
                                    ImageStyle="{DynamicResource ViewContentControlStyle}">
                    <ctl:ETextBox x:Name="UserName"  HorizontalAlignment="Left" Style="{StaticResource {x:Type TextBox}}"
                                                LostFocus="Textbox_OnLostFocus"
                                                Text="{Binding Path=UserName, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True}">
                    </ctl:ETextBox>
                </ctl:NewLabel>
            </StackPanel>

            <StackPanel Grid.Row="9" Grid.Column="2" Style="{StaticResource ViewContentStyle}" Visibility="{Binding SelectedAuthenticationType, Converter={StaticResource AuthToVisibility}}">
                <StackPanel Orientation="Horizontal" KeyboardNavigation.TabNavigation="None">
                    <Label Style="{DynamicResource ContentLabelStyle}" Content="{x:Static common:LocalResources.UPasswordLabel}"/>
                <AdornerDecorator>
                    <PwdBox x:Name="Password"  
                             HorizontalAlignment="Left"
                             LostFocus="Textbox_OnLostFocus" PasswordChar="*"
                    </PwdBox>
                </AdornerDecorator>
            </StackPanel>

我有3个文件,几乎相同的代码被重用。我认为有一种方法可以通过使用常见的自定义控件来摆脱这种情况。但是,我没有看到很多关于如何做到的例子。任何线索都会很棒。

1 个答案:

答案 0 :(得分:0)

向项目添加新的UserControl并将常用XAML移动到此项目。

然后,您可以在任何其他视图中创建此UserControl的实例(将“UserControl1”替换为UserControl的实际名称):

<!--insert the shared markup here: -->
<local:UserControl1 />