一个UserControl WPF的不同模板

发布于 2025-02-07 00:29:00 字数 455 浏览 1 评论 0原文

有人知道如何处理这种情况吗?

我有USERCONTROL,可以将文本放入一列中,并将照片放入第二列中。但是我需要能够改变这两个的顺序。实际上,我需要三个状态:

  • 右图上的左 /图像上的文本框,右图右图
  • 的右图上的右
  • 宽度文本框

上的左图框我希望能够从ComboBox中选择一个选项。这是一个设计示例:

此userControl也是另一个UserControl中的ItemTemplate,因此当我添加此UserControl类型的对象时,它也会添加以查看。最好的方法是什么?

Does someone have an idea how I could handle this case?

I have UserControl where I am able to put text in one column and photo in second column. But I need to be able to change the order of those two. Actually I need three states:

  • Textbox on the left / Image on the right
  • Image on the left / Textbox on the right
  • Full width textbox

I would like to be able to choose one option from combobox. Here is a design example:
Example

This UserControl is also a ItemTemplate in another UserControl so when I add object of type of this usercontrol it will be added to view also. What is the best way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧竹 2025-02-14 00:29:00

因为无论如何它都在数据台板中

    <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBox x:Name="TextElement" Grid.Column="0" Grid.ColumnSpan="1"/>
            <Image x:Name="ImageElement" Grid.Column="1"/>
        </Grid>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding SelectedLayout}" Value="{x:Static vm:Layout.ImageText}">
                <Setter TargetName="TextElement" Property="Grid.Column" Value="1"/>
                <Setter TargetName="ImageElement" Property="Grid.Column" Value="0"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding SelectedLayout}" Value="{x:Static vm:Layout.TextOnly}">
                <Setter TargetName="TextElement" Property="Grid.ColumnSpan" Value="2"/>
                <Setter TargetName="ImageElement" Property="Visibility" Value="Collapsed"/>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>

或作为usercontrol

    <UserControl x:Name="userControl" ...>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBox Grid.Column="{Binding SelectedLayout, ElementName=userControl, Converter={StaticResource LayoutToColumnConverter}}"
                     Grid.ColumnSpan="{Binding SelectedLayout, ElementName=userControl, Converter={StaticResource LayoutToColumnSpanConverter}}"/>
            <Image Grid.Column="{Binding SelectedLayout, ElementName=userControl, Converter={StaticResource LayoutToColumnConverter}, ConverterParameter=invertedOrWhatever}"/>
        </Grid>
    </UserControl>



    <whatever:MyUserControl SelectedLayout="{Binding SelectedLayout, ElementName=LayoutCombobox}"/>

since it is in a datatemplate anyway

    <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBox x:Name="TextElement" Grid.Column="0" Grid.ColumnSpan="1"/>
            <Image x:Name="ImageElement" Grid.Column="1"/>
        </Grid>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding SelectedLayout}" Value="{x:Static vm:Layout.ImageText}">
                <Setter TargetName="TextElement" Property="Grid.Column" Value="1"/>
                <Setter TargetName="ImageElement" Property="Grid.Column" Value="0"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding SelectedLayout}" Value="{x:Static vm:Layout.TextOnly}">
                <Setter TargetName="TextElement" Property="Grid.ColumnSpan" Value="2"/>
                <Setter TargetName="ImageElement" Property="Visibility" Value="Collapsed"/>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>

Or as UserControl

    <UserControl x:Name="userControl" ...>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBox Grid.Column="{Binding SelectedLayout, ElementName=userControl, Converter={StaticResource LayoutToColumnConverter}}"
                     Grid.ColumnSpan="{Binding SelectedLayout, ElementName=userControl, Converter={StaticResource LayoutToColumnSpanConverter}}"/>
            <Image Grid.Column="{Binding SelectedLayout, ElementName=userControl, Converter={StaticResource LayoutToColumnConverter}, ConverterParameter=invertedOrWhatever}"/>
        </Grid>
    </UserControl>



    <whatever:MyUserControl SelectedLayout="{Binding SelectedLayout, ElementName=LayoutCombobox}"/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文