首先,如果之前已经提出这个问题,我道歉。我已经完成了一些谷歌搜索,但我不确定正确的关键字是什么,以找到我正在寻找的。 p>
基本上我的问题很容易理解。我有一个Silverlight项目,在MainPage.xaml上我声明了一个UserControl并给它一个高度和宽度。
<Grid>
<control:AlarmButton Height="50" Width="50" />
</Grid>
现在在AlarmButton中我有一个按钮,它有自己的控制模板,按我想要的方式设置。它现在有一个内容演示者。
<UserControl
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-compatibility/2006"
mc:Ignorable="d"
x:Class="Alarms.AlarmButton">
<UserControl.Resources>
<ControlTemplate x:Key="StatusButton" >
<Viewbox Stretch="Fill">
<Grid>
<Path x:Name="Base" StrokeThickness="1.0" Stroke="#ff000000" StrokeMiterLimit="1.0" Fill="#ff666666" Data="F1 M 99.500,99.500 L 0.500,99.500 L 0.500,0.500 L 99.500,0.500 L 99.500,99.500 Z"/>
<Path x:Name="Interior" Opacity="0.5" StrokeThickness="1.0" Stroke="#ff191919" StrokeMiterLimit="1.0" Data="F1 M 97.500,97.500 L 2.500,97.500 L 2.500,2.500 L 97.500,2.500 L 97.500,97.500 Z">
<Path.Fill>
<LinearGradientBrush MappingMode="Absolute" StartPoint="2.500,2.499" EndPoint="97.500,97.499">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.00" Color="#3FFFFFFF"/>
<GradientStop Offset="0.151" Color="Transparent"/>
<GradientStop Offset="1.00" Color="#BFFFFFFF"/>
<GradientStop Color="#53FFFFFF" Offset="0.655"/>
</LinearGradientBrush.GradientStops>
<LinearGradientBrush.Transform>
<MatrixTransform Matrix="1.000,0.000,-0.000,-1.000,0.000,100.000" />
</LinearGradientBrush.Transform>
</LinearGradientBrush>
</Path.Fill>
</Path>
<Path x:Name="LargeShader" Opacity="0.1" Fill="#ffffffff" Data="F1 M 94.667,18.667 L 94.667,94.667 L 6.333,94.667 C 6.333,94.667 94.667,67.348 94.667,18.667 Z"/>
<Path x:Name="SmallShader" Opacity="0.1" Fill="#ffffffff" Data="F1 M 94.667,43.667 L 94.667,94.667 L 20.333,94.667 C 20.333,94.667 94.667,76.334 94.667,43.667 Z"/>
<ContentPresenter x:Name="contentPresenter" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
</Viewbox>
</ControlTemplate>
</UserControl.Resources>
<Grid >
<Button Template="{StaticResource StatusButton}" >
<TextBlock Text="this is a text box"
TextTrimming="WordEllipsis" />
</Button>
</Grid>
</UserControl>
稍后我将把Text属性绑定到DependencyProperty,这样我就可以使用带有多个文本的按钮。我想要发生的是,如果文本太大,它将椭圆形,并且没有框更改或文本块溢出。我只需要将TextBlock的高度和宽度绑定到某些值以包含它。
我的问题是这个;是否有可能TextBlock将其高度和宽度绑定到MainPage.xaml中声明的值?或者这比我想象的更复杂?有没有更好的方法来解决这个问题?
修改
这可能会提供更多关于我想要完成的信息。这是RobSiklos改变的“按钮”
答案 0 :(得分:0)
我不确定我完全理解。您是否尝试制作文本椭圆,因为如果文本太大,您不希望文本块增长?如果是这样,您可以使用转换器(在Text属性的绑定语句中)让转换器返回文本在一定长度下的全文值,或者如果文本结束时转换器显示椭圆值。
答案 1 :(得分:0)
这应该有效: -
<Grid x:Name="LayoutGrid">
<Button Template="{StaticResource StatusButton}" >
<TextBlock Text="this is a text box" TextTrimming="WordEllipsis"
Width="{Binding Parent.Width, ElementName=LayoutRoot}"
Height="{Binding Parent.Height, ElementName=LayoutRoot}" />
</Button>
</Grid>
它假定将指定宽度和高度。另一种方法是使用UserControl的SizeChanged
事件直接指定Width和Height的值。
答案 2 :(得分:0)
我认为这个问题与Viewbox有关,它告诉TextBlock它有足够的空间。
可能删除Viewbox将解决问题(或者至少将ContentPresenter从Viewbox中取出)