WPF自定义控件

时间:2010-08-10 05:22:31

标签: wpf controls

我有一些控件和视图框的视图。目前在视图框中是一个网格和底部的图形。应用程序读取XML文件并刷新XML文件中每个节点的网格内容和图形。

现在,应用程序不仅要显示带有图形的网格。根据XML节点的不同,应用程序应该显示一个网格,其中包含类似now或grahpic的图形,以及底部的2行文本。

1 个答案:

答案 0 :(得分:1)

您解释了您的申请是什么,但您没有提出问题。请说明问题,我可以尝试给你一个更好的答案。

我最好的猜测是“我该怎么做?我需要编写自定义控件吗?”如果那是你要问的,你可能不会。

通常,您不需要自定义控件来为列表框,列表视图或网格视图创建专用视图。您通常可以使用数据模板,控件模板或样式来实现您的目标。

我不确定这是否是一个很好的资源,但XAML看起来可能是学习如何进行控制模板的一个很好的起点: http://ligao101.wordpress.com/2007/07/27/customizing-listview-in-wpf-part-i/

只需谷歌搜索任何这些术语(“ListView数据模板”等)可能会为您提供一些好的信息。

修改

根据评论,您尝试在UI中的同一空间中支持两种类型的数据之一,具体取决于XML文件中的内容:

  • 仅图片
  • 图片,加上两行文字

解决此问题的一种方法是为XML项创建视图模型,并将项绑定到这些视图模型:

public class XmlItemViewModel // Call this something more appropriate to your app
{
    public Visibility TextVisibility { get; set; }
    public string Text1 { get; set; }
    public string Text2 { get; set; }
    public Image Picture { get; set; }
}

如果您已经有一个具有此数据的其他类,请保留它,并使视图模型读取该类的属性。

将XAML TextBlock 可见性属性绑定到“{Binding TextVisibility}”,它应该可以正常工作。如果将viewmodel属性设置为“Visibility.Collapsed”,则文本块将消失,并且ViewBox应缩小以仅适合图像。

如果这样做,则不需要自定义控件,只需要自定义ViewModel类。

如果它似乎没有正确折叠,您可以使用StackPanel或WrapPanel包装图像和文本块。