如何动态更改嵌套的用户控件(非mvvm)

本文关键字:用户 mvvm 嵌套 控件 何动态 动态 | 更新日期: 2023-09-27 17:51:12

我得到了这个应用程序,它有下拉菜单,它改变了由许多相同的小用户控件组成的大用户控件(BW1)。现在我把所有的用户控件转移到一个dll(在我用皮肤解决这个问题之前)。这是一个大的用户控件:

 <UserControl 
         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:WpfControlLibrary1" x:Class="WpfControlLibrary1.BW1"
         mc:Ignorable="d" 
         d:DesignHeight="1028" d:DesignWidth="1280">
<UserControl.Resources>
    <Style x:Key="SUC" TargetType="{x:Type local:SW1}">
        <Setter Property="HorizontalAlignment" Value="Stretch"/>
        <Setter Property="VerticalAlignment" Value="Stretch"/>
        <Setter Property="Margin" Value="2,2,2,2"/>
    </Style>
</UserControl.Resources>
<Grid Background="Black">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <local:SW1 x:Name="d11" Grid.Column="1" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d10" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d01" Grid.Column="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d02" Grid.Column="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d03" Grid.Column="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d04" Grid.Column="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d05" Grid.Column="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d06" Grid.Column="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d07" Grid.Column="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d08" Grid.Column="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d09" Grid.Column="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d12" Grid.Column="2" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d13" Grid.Column="3" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d14" Grid.Column="4" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d15" Grid.Column="5" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d16" Grid.Column="6" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d17" Grid.Column="7" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d18" Grid.Column="8" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d19" Grid.Column="9" Grid.Row="1" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d20" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d21" Grid.Column="1" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d22" Grid.Column="2" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d23" Grid.Column="3" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d24" Grid.Column="4" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d25" Grid.Column="5" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d26" Grid.Column="6" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d27" Grid.Column="7" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d28" Grid.Column="8" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d29" Grid.Column="9" Grid.Row="2" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d30" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d31" Grid.Column="1" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d32" Grid.Column="2" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d33" Grid.Column="3" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d34" Grid.Column="4" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d35" Grid.Column="5" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d36" Grid.Column="6" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d37" Grid.Column="7" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d38" Grid.Column="8" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d39" Grid.Column="9" Grid.Row="3" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d40" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d41" Grid.Column="1" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d42" Grid.Column="2" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d43" Grid.Column="3" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d44" Grid.Column="4" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d45" Grid.Column="5" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d46" Grid.Column="6" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d47" Grid.Column="7" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d48" Grid.Column="8" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d49" Grid.Column="9" Grid.Row="4" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d50" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d51" Grid.Column="1" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d52" Grid.Column="2" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d53" Grid.Column="3" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d54" Grid.Column="4" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d55" Grid.Column="5" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d56" Grid.Column="6" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d57" Grid.Column="7" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d58" Grid.Column="8" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d59" Grid.Column="9" Grid.Row="5" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d60" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d61" Grid.Column="1" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d62" Grid.Column="2" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d63" Grid.Column="3" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d64" Grid.Column="4" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d65" Grid.Column="5" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d66" Grid.Column="6" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d67" Grid.Column="7" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d68" Grid.Column="8" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d69" Grid.Column="9" Grid.Row="6" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d70" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d71" Grid.Column="1" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d72" Grid.Column="2" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d73" Grid.Column="3" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d74" Grid.Column="4" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d75" Grid.Column="5" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d76" Grid.Column="6" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d77" Grid.Column="7" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d78" Grid.Column="8" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d79" Grid.Column="9" Grid.Row="7" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d80" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d81" Grid.Column="1" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d82" Grid.Column="2" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d83" Grid.Column="3" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d84" Grid.Column="4" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d85" Grid.Column="5" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d86" Grid.Column="6" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d87" Grid.Column="7" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d88" Grid.Column="8" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d89" Grid.Column="9" Grid.Row="8" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d90" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d91" Grid.Column="1" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d92" Grid.Column="2" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d93" Grid.Column="3" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d94" Grid.Column="4" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d95" Grid.Column="5" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d96" Grid.Column="6" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d97" Grid.Column="7" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d98" Grid.Column="8" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
    <local:SW1 x:Name="d99" Grid.Column="9" Grid.Row="9" Style="{StaticResource SUC}" Stroke="red"/>
</Grid>

现在我想将动态小用户控件SW1更改为SW2或SW3(全部来自同一dll),而无需更改布局。现在有什么方法可以做到这一点,而不用在mvvm中重新制作整个应用程序?

如何动态更改嵌套的用户控件(非mvvm)

如果你真的不想使用MVVM,你可以命名你的Grid,然后从你的代码后面换出控件:

<Grid Name="YourGrid" Background="Black">
    ...
</Grid>

后面的代码:

// Repeat as necessary
YourGrid.Children.RemoveAt(indexOfControlToRemove);
SW2 sw2 = new SW2();
sw2.SetValue(Grid.RowProperty, 1);
sw2.SetValue(Grid.ColumnProperty, 2);
YourGrid.Children.Add(sw2);