【问题标题】:Adding and changing usercontrol at run time in a WPF application在 WPF 应用程序运行时添加和更改用户控件
【发布时间】:2010-12-18 02:11:21
【问题描述】:

我的情况如下,我将第一次使用 WPF,所以任何关于如何进行的建议都很好: 我有一个下拉菜单,当我从中选择任何项目时 - 它应该更改同一窗口中控件的结构。新控件包含 - 两个菜单项以及一个文本框和一个列表框。选择一个菜单项将显示文本框,其他将显示列表框。现在对于初始组合框中的每个项目,我将为每个菜单项提供不同的信息。

问题: 假设我在组合框中有 10 个项目 - 每个项目有 2 个菜单项 - 所以要显示 20 个不同的东西。 -- 我应该如何声明这 20 种不同的东西 -- 选择特定组合时我应该如何加载每个组合

【问题讨论】:

    标签: wpf user-controls controls


    【解决方案1】:

    您应该查看 ControlTemplate。您可以定义一组模板,然后将它们应用于控件,使它们成为您想要的任何东西。因此,当在您的下拉菜单上触发 item changed 事件时,加载并应用您想要的模板。

    <!--- your xaml file --->
        <Control x:Name="Main"/>
    
    
    // you CS file....
        OnItemChanage(....)
        {
            if ( Main!= null ) 
            Main.Template = MyNewTemplate;
        }
    

    【讨论】:

      【解决方案2】:

      如果您想一次显示多组控件,请将所有控件添加到您的窗口并使用数据绑定设置它们的Visibility,然后使用ComboBox 更新控件绑定到的属性。

      或者,如果您只想一次显示一个控件,只需使用 ComboBox 中的 DataContext:

      <Window.DataContext>
        <x:Array x:Key="myItems">
          <local:Item MenuItem1="abc" MenuItem2="def" />
          <local:Item MenuItem1="ghi" MenuItem2="jkl" />
          ...
          <local:Item MenuItem1="ghi" MenuItem2="jkl" />
        </x:Array>
      </Window.DataContext>
      
      
      <Grid>
        ...
        <ComboBox x:Name="selection" ItemsSource="{Binding}">
           ...
      
        <StackPanel DataContext="{Binding /}" ...>
          <MenuItem Header="{Binding MenuItem1}" OnClick="DisplayListBox" />
          <MenuItem Header="{Binding MenuItem2}" OnClick="DisplayTextBox" />
          <TextBox Visibility="Hidden" ... />
          <ListBox Visibility="Hidden" ... />
        </StackPanel>
      
      </Grid>
      

      为 DisplayListBox 和 DisplayTextBox 提供适当的代码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-21
        • 1970-01-01
        • 2010-12-22
        • 2011-07-09
        • 2016-04-20
        • 2018-10-09
        • 2021-11-24
        相关资源
        最近更新 更多