Kyl*_*eld 5 c# xaml winrt-xaml windows-8.1 windows-phone-8.1
我是Windows 8.1开发的新手,请原谅我,如果这个问题很明显或很简陋.我已经尝试过各种各样的属性了,我不能按照我想要的方式使它工作,所以我想也许有人可以帮我一臂之力.
我正在做什么的描述:我创建了一个UserControl,所以我可以为我想要做的这一件事隔离UI,并且我也可以在我的真实UI中的各个地方使用它.UserControl包含一个Button带有a Grid的内容.的Grid具有3行中的定义和我想的行(和该Border元件和TextBlock它们所包含的元素)占用的总高度的20%,该高度的60%,并且高度为行0,1的20%,并且2,分别.我也想要Grid占据整个高度Button.
这是UserControl的XAML标记,颜色鲜艳,所以一切都很明显.
<UserControl
x:Name="UserControlRoot"
d:DesignHeight="300"
d:DesignWidth="400"
mc:Ignorable="d"
>
<Grid x:Name="LayoutRoot" Margin="0" Background="Red">
<Grid.Resources>
<Style TargetType="TextBlock" x:Key="UCTextBlock">
<Setter Property="FontSize" Value="20" />
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="TextWrapping" Value="NoWrap" />
</Style>
</Grid.Resources>
<!-- THIS BUTTON HAS SPACING AROUND IT - WHY? -->
<Button
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
BorderBrush="White"
BorderThickness="5"
Background="Green"
Padding="0"
Foreground="Blue"
Margin="0"
>
<Grid Background="#ff333333">
<Grid.RowDefinitions>
<RowDefinition Height="2*" />
<RowDefinition Height="6*" />
<RowDefinition Height="2*" />
</Grid.RowDefinitions>
<Border Grid.Row="0" HorizontalAlignment="Stretch">
<TextBlock Text="THIS IS MY RED TEXT" Foreground="LightCoral" Style="{StaticResource UCTextBlock}" />
</Border>
<Border Grid.Row="1" HorizontalAlignment="Stretch">
<TextBlock Text="THIS IS MY WHITE TEXT, NOT TALL" Foreground="White" Style="{StaticResource UCTextBlock}" />
</Border>
<Border Grid.Row="2" HorizontalAlignment="Stretch">
<TextBlock Text="THIS IS MY BLUE TEXT" Foreground="LightSkyBlue" Style="{StaticResource UCTextBlock}" />
</Border>
</Grid>
</Button>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
这就是设计师的样子:

请注意,第1行(高度="6*")中的白色文本不是第0行和第2行的3倍.据我所知,高度="6*"vs高度=" 2*"应该使第1行比第0行和第2行更大.我显然在这里看错了,但我不知道它是什么.
关于为什么TextBlocks没有按照我希望的方式调整大小的任何想法? 没有任何外部DesignTemplates会影响任何元素的样式(据我所知,虽然我不确定是否有办法让我明确/彻底地确定这是否真的如此).
一个大多数不相关的旁边:如果这有助于其他人,我发现在按钮上放置一个Margin ="0,-10"将摆脱外部Grid中按钮周围的红色区域.这需要一段时间来解决这个问题,所以希望它能节省一些时间.可能有一个具有相同效果的ThemeResource,但如果是这样,我从未找到它.
TL;DR:设置HorizontalContentAlignment并VerticalContentAlignment至Stretch
按钮ContentPresenter中的HorizontalAlignment和VerticalAlignment属性分别绑定到HorizontalContentAlignment和VerticalContentAlignment属性。您可以在MSDN上找到的默认控件模板中看到这一点。
<Grid>
...
<Border x:Name="Border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Margin="3">
<ContentPresenter x:Name="ContentPresenter"
Content="{TemplateBinding Content}"
ContentTransitions="{TemplateBinding ContentTransitions}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
AutomationProperties.AccessibilityView="Raw"/>
</Border>
...
</Grid>
Run Code Online (Sandbox Code Playgroud)
因为您Grid实际上位于内容演示器内部,所以它填充了该空间(而不是按钮的整个空间)。通过设置这些属性,Stretch您可以填充ContentPresenter可用空间,然后Grid也会这样做,从而为您提供正确的行为。
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |