我从wpf开始,我想使用静态资源,当我添加标签时我得到一个错误:属性Content只能设置一次,现在当我在stackoverflow上搜索时我明白了窗口标签只能有一个子元素,事情就在书上我读取静态资源标签就在网格标签之上,这是怎么回事?这是我的代码:
<Window x:Class="BaseBallSimulator.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibilit/2006"
xmlns:local="clr-namespace:BaseBallSimulator"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" >
<StaticResource></StaticResource>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="245*"/>
<ColumnDefinition Width="272*"/>
</Grid.ColumnDefinitions>
<StackPanel>
<StackPanel Margin="10">
<TextBlock Text="Trajectory"></TextBlock>
<TextBox Name="TrajectoryTextBox" Text="0" Margin="0,5,0,0" Height="20"></TextBox>
</StackPanel>
<StackPanel Margin="10">
<TextBlock Text="Distance"></TextBlock>
<TextBox Name="DistanceTextBox" Text="0" Margin="0,5,0,0" Height="20"></TextBox>
</StackPanel>
<Button Name="PlayButton" Content="PRESS To PLAY" Margin="10" Click="PlayButton_Click" ></Button>
</StackPanel>
<StackPanel Grid.Column="1">
<StackPanel Margin="5">
<TextBlock Text="Pitcher Says" Margin="5"/>
<ListView x:Name="PitcherSaysListView" Margin="5" Height="110" />
</StackPanel>
<StackPanel Margin="5,0,5,5">
<TextBlock Text="Fan Says" Margin="5"/>
<ListView x:Name="FanSaysListView" Margin="5" Height="110" />
</StackPanel>
</StackPanel>
</Grid>
</Window>
答案 0 :(得分:1)
删除<StaticResource></StaticResource>
,您的代码将被编译。
应在<Window.Resources>
:
<Window ...>
<Window.Resources>
<SolidColorBrush x:Key="brush" Color="Red" />
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="245*"/>
<ColumnDefinition Width="272*"/>
</Grid.ColumnDefinitions>
<StackPanel>
<StackPanel Margin="10">
<TextBlock Text="Trajectory"></TextBlock>
<TextBox Name="TrajectoryTextBox" Text="0" Margin="0,5,0,0" Height="20"></TextBox>
</StackPanel>
<StackPanel Margin="10">
<TextBlock Text="Distance"></TextBlock>
<TextBox Name="DistanceTextBox" Text="0" Margin="0,5,0,0" Height="20"></TextBox>
</StackPanel>
<Button Name="PlayButton" Content="PRESS To PLAY" Margin="10" ></Button>
</StackPanel>
<StackPanel Grid.Column="1">
<StackPanel Margin="5">
<TextBlock Text="Pitcher Says" Margin="5"/>
<ListView x:Name="PitcherSaysListView" Margin="5" Height="110" />
</StackPanel>
<StackPanel Margin="5,0,5,5">
<TextBlock Text="Fan Says" Margin="5"/>
<ListView x:Name="FanSaysListView" Margin="5" Height="110" />
</StackPanel>
</StackPanel>
</Grid>
</Window>
虽然定义一个空的<StaticResource>
元素没有任何意义。
答案 1 :(得分:0)
静态(以及动态)资源通过所谓的资源字典进行管理。您可以添加显式的resourcedictionary文件并在某处引用它。
此外,XAML中的每个UIElement都可以拥有自己的一组资源(静态和动态)。静态和动态资源的定义方式完全相同,区别在于如何分配它们。
例如,您可以使用
为整个窗口创建颜色资源<Window [...]>
<Window.Resources>
<SolidColorBrush x:Key="myColor">Blue</Color>
</Window.Resources>
</Window>
资源标记内定义的资源只能由元素本身和任何子元素显示。 x:Key
- 属性为资源提供了一个名称,您可以使用该名称来引用它。然后,您可以使用
<Grid Background="{StaticResource myColor}"/>
此外,您可以定义以静态方式使用资源还是使用动态资源(使用DynamicResource)。然后,您可以使用之前设置的密钥来访问您的资源。
如果要更改特定控件的外观,例如它的字体大小,边距和颜色,您可以使用所谓的样式,而不是以繁琐的方式分配每个属性。样式的定义与普通资源的定义完全相同
<Window.Resources>
<Style x:Key="MyTextBlock" TargetType="TextBlock">
<Setter Property="FontSize" Value="28"/>
<Setter Property="Background" Value="Red"/>
<Setter Property="Margin" Value="5"/>
</Style>
</Window.Resources>
注意两件事:除x:Key
- 属性外,我们还指定了TargetType
- 属性来告诉VisualStudio我们希望更改哪个元素。其次,我们使用Setters来改变该元素的特定属性。要将样式应用于控件,只需使用
<TextBlock Style="{StaticResource MyTextBlock}">My styled Textblock</TextBlock>
奖励:使用样式时,您可以省略x:Key
- 属性。这将自动将样式应用于TargetType
类型的所有子控件。