【问题标题】:C# .NET dynamic form controls or wpf templatesC# .NET 动态表单控件或 wpf 模板
【发布时间】:2012-11-14 16:35:38
【问题描述】:

在 WPF 应用程序中,我想使用来自文件夹位置的图像来显示图块网格(本质上是按钮)。文件夹中可能有任何不同数量的图像,因此需要动态生成图块/按钮并根据数量进行格式化。这些需要是可以触发鼠标点击事件的按钮。

我对 C# 和 .NET 很陌生,所以我想了解一下最好的方法是什么。我已经将其作为 WPF 应用程序启动,所以使用模板是个好主意吗?或者,如果只是动态创建带有背景图像的表单按钮是一个简单的选择,那么我会试一试。

【问题讨论】:

    标签: c# .net wpf dynamic


    【解决方案1】:

    您可能需要一个 ItemsControl,例如 ListView。不幸的是,WPF 仅提供 GridView 实现,但 ListView 旨在支持您在 Windows 文件资源管理器中看到的所有视图。对于基于 Tiled 的视图,您需要重写 ViewBase 类并将其分配给 ListView 的 View 属性。

    几年前,我有示例代码可以演示您想要什么。

    以下链接包含 MSDN 示例: MSDN ListView.View samples

    How to: Create a Custom View Mode

    我知道 Xceed DataGrid 有一个内置的 CardView 模式。不知道免费版有没有:Xceed WPF DataGrid documentation

    编辑我刚刚检查了 MSDN 示例,我认为它们与您想要的很接近。

    【讨论】:

      【解决方案2】:

      我会选择ItemsControl。您需要一个代表按钮的类,具有 X、Y、ImageUri 等属性。您通过ObservableCollection 公开生成的按钮并将其绑定到ItemsControlItemsSource。然后你把你的ItemsPanelTemplate 改成网格:

              <ItemsControl.ItemsPanel>
                  <ItemsPanelTemplate>
                      <Grid>                        
                          <!--Here go rows and columns definitions-->
                      </Grid>
                  </ItemsPanelTemplate>                
              </ItemsControl.ItemsPanel>
      

      如果您有固定数量的行和列,您可以直接在 XAML 中添加它们,否则在运行时在代码隐藏中生成它们。你添加ItemsContainerStyle进行定位:

              <ItemsControl.ItemContainerStyle>
                  <Style>
                      <Setter Property="Grid.Row" Value="{Binding Y}" />
                      <Setter Property="Grid.Column" Value="{Binding X}" />
                  </Style>
              </ItemsControl.ItemContainerStyle>
      

      另外,您需要ItemTemplate,它将覆盖显示按钮的图像。其他选择是使用CanvasUniformGrid 作为ItemsPanelTemplate(各有优缺点)。

      【讨论】:

      • 感谢 amnezjak,我设法从谷歌搜索了足够多的关键字,并通过暴力破解了它。
      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 2011-02-21
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多