我正试图掌握WPF应用程序中样式/绑定数据的不同方法。为了更好地理解这一点,我想提供关于如何设计我的具体示例的建议/帮助。
下面的屏幕截图展示了我的目标。我还包括了我已编写的代码。但是,这只是使用简单的StackPanel输出下面的主标题和文本。
我的第一个问题是关于有多少“信息”,应该在View中添加什么,然后在我的resources.xaml中设置什么以及如何设置?这可能很模糊,但我想了解我应该在我的视图中包含哪些控件以及我应该在哪些代码中添加我的样式。
图片示例
MyView.xaml
<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="20 0">
<ItemsControl ItemsSource="{Binding MyModelList}" ItemTemplate="{StaticResource MyViewDataTemplate}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
Resources.xaml
<DataTemplate x:Key="MyViewDataTemplate">
<Border BorderThickness="0 0 0 1" BorderBrush="Black">
<StackPanel>
<Label Content="{Binding Heading}" FontSize="24" />
<Label>
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="Card: {0}, {1}">
<Binding Path="PropertyA"></Binding>
<Binding Path="PropertyB"></Binding>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label.Content>
</Label>
</StackPanel>
</Border>
</DataTemplate>
答案 0 :(得分:2)
我不确定我对你的问题了解多少,但你要问的第一件事就是放入资源以及放在主要布局中的内容。
一个简单的规则是将可以在资源中重用的代码放在主布局中。例如,假设您必须在UI的许多位置显示文本框。现在,您可以将文本框背景,字体,前景,大小等放在资源中,这样每次使用文本框时,都可以轻松地从资源中重用此信息。同样,如果发生变化,您只需要在一个地方而不是每个文本框本身进行更改。
what are the controls I should be looking at to include in my View
和what code should I be looking at to put in my styles.
嗯,关于第一部分,它完全取决于你想要实现的场景。从图像示例中,网格可以使用三列,因为您的UI似乎有三个部分,即标题然后是两个文本块。在第一列中放置一个带有两个文本块的stackpanel(一个用于标题,一个用于下面的小描述),在接下来的两列中,您可以在每个列中放置一个文本块。
现在关于你的第二点,一旦你把文本块放在Grid的列中,你可以将样式信息如蓝色背景等放在资源中
我使用此XAML在图像中创建结构
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Vertical" Grid.Column="0">
<TextBlock FontSize="20">Hilighted</TextBlock>
<TextBlock FontSize="10">Card</TextBlock>
</StackPanel>
<StackPanel Orientation="Vertical" Grid.Column="1">
<TextBlock FontSize="20">0</TextBlock>
<TextBlock FontSize="10">Text</TextBlock>
</StackPanel>
<StackPanel Orientation="Vertical" Grid.Column="2">
<TextBlock FontSize="20">0</TextBlock>
<TextBlock FontSize="10">Text</TextBlock>
</StackPanel>
</Grid>
现在这些是没有任何样式的普通控件。您可以在资源中添加样式并将其应用于文本块
答案 1 :(得分:1)
问题的答案“我应该把它放在视图中还是在资源中?”结果是回答自己。如果你把它放在视图中,这是我开始做大多数事情的地方,最终将会或者不会变成问题。如果它成为一个问题,那么直接将视图中的东西(无论是什么)拉出来并将其变成资源。
最终,正如Haris Hasan所指出的那样,重用的必要性决定了这一决定。除非您知道自己需要重复使用某个样式,否则YAGNI原则适用于所有其他内容。