<GrID.RowDeFinitions> <RowDeFinition Height="{TemplateBinding Height-Height/5}"/> <RowDeFinition Height="{TemplateBinding Height/15}"/> <RowDeFinition Height="{TemplateBinding Height/20}"/> <RowDeFinition Height="{TemplateBinding Height/6}"/> </GrID.RowDeFinitions>
虽然除法工作正常,但减法不会产生输出.
我也尝试过如下:
<RowDeFinition Height="{TemplateBinding Height-(Height/5)}"/>
仍然没有结果.任何建议PLZ.
谢谢,
Subhen
**
更新
**
现在在我的XAML中,我尝试实现IvalueConverter,如:
<RowDeFinition Height="{TemplateBinding Height,Converter={StaticResource heightConverter}}"/>
添加引用为
<local:medIEElementHeight x:Key="heightConverter"/>
在旁边的generic.cs我编码如下:
public class medIEElementHeight : IValueConverter { public object Convert(object value,Type targettype,object parameter,CultureInfo culture) { //customVIDeoControl objVdeoCntrl=new customVIDeoControl(); double custoMediaElementHeight = (double)value;//objVdeoCntrl.customMediaPlayer.Height; double mediaElementHeight = custoMediaElementHeight - (custoMediaElementHeight / 5); return mediaElementHeight; } #region IValueConverter Members object IValueConverter.ConvertBack(object value,CultureInfo culture) { throw new NotImplementedException(); } #endregion }
但是在元素RowDefination中获得异常未知元素高度.
更新代码@Tony
<Style targettype="local:customVIDeoControl"> <Setter Property="Template"> <Setter.Value> <ControlTemplate targettype="local:customVIDeoControl"> <GrID> <GrID.RowDeFinitions> <RowDeFinition Height="{TemplateBinding Height-Height/5}"/> <RowDeFinition Height="{TemplateBinding Height/15}"/> <RowDeFinition Height="{TemplateBinding Height/20}"/> <RowDeFinition Height="{TemplateBinding Height/6}"/> </GrID.RowDeFinitions> <GrID.ColumnDeFinitions> <ColumnDeFinition WIDth="2*"/> <ColumnDeFinition WIDth="2*"/> <ColumnDeFinition WIDth="2*"/> </GrID.ColumnDeFinitions> <MediaElement x:name="customMediaPlayer" Source="{TemplateBinding CustomMediaSource}" HorizontalAlignment="Center" VerticalAlignment="Center" Height="{TemplateBinding Height}" WIDth="{TemplateBinding WIDth}" GrID.Row="0" GrID.ColumnSpan="3" /> </GrID> </ControlTemplate> </Setter.Value> </Setter> </Style>
现在,我实现的XAML文件包含如下:
<customMediaElement:customVIDeoControl x:name="custMediaElement" WIDth="400" Height="300" nextBtnEvent="custMediaElement_nextBtnEvent" prevBtnEvent="custMediaElement_prevBtnEvent" Visibility="Collapsed"/>
现在,我想根据custMediaElement的高度对值进行减法或除法.
解决方法 你提出了几个好问题;但是,我们常常在忽略原始问题的同时找到解决方案.在尝试回答您的问题之前,我想探索您的布局期望.您提供的代码表明您有一个自定义控件(customVIDeoControl),其实例的高度为300px.应用于此控件的ControlTemplate有4行,它们根据实例高度计算出高度.根据这些设置,您的4行将具有以下值:
第0行:240
第1:20行
第2行:60
第3行:50
这些总数达到370px,比对照大70px.这意味着第3行将完全隐藏在视图中,而第2行将被剪切到前40px.我认为这不是你的意图.如果这是您的意图,那么下面的答案将有助于您走上正轨.如果您打算根据比例缩放行高,则可以使用星形大小调整.您建议的比例将使用以下设置:
<GrID.RowDeFinitions> <RowDeFinition Height="240*"/> <RowDeFinition Height="20*"/> <RowDeFinition Height="60*"/> <RowDeFinition Height="50*"/> </GrID.RowDeFinitions>
如果您仍想测量行的高度,则需要进行一些修正.
>无法在标记扩展(花括号)中执行数学运算.你的除法方法可能不会抛出xaml解析异常,但我怀疑它是否正常工作.值转换器是完成您想要的所必需的.
> TemplateBinding实际上只是relativeSource绑定的轻量级版本.由于TemplateBinding重量轻,因此不允许使用转换器.
要获得预期的行为,您需要使用与relativeSource的绑定.因此,您想要的代码看起来像这样:
<RowDeFinition Height="{Binding Path=Height,relativeSource={relativeSource TemplatedParent},Converter={StaticResource divisionConverter},ConverterParameter=15}" />
其中divisionConverter是自定义转换器的关键.此示例中的ConverterParameter允许开发人员传入分母,而不必为每个数字创建单独的转换器.
以下是您需要创建的自定义divisionConverter的示例:
public class divisionConverter : IValueConverter{ #region IValueConverter Members public object Convert(object value,System.Globalization.CultureInfo culture) { // Default to 0. You may want to handle divIDe by zero // and other issues differently than this. double result = 0; // Not the best code ever,but you get the IDea. if (value != null && parameter != null) { try { double numerator = (double)value; double denominator = double.Parse(parameter.ToString()); if (denominator != 0) { result = numerator / denominator; } else { // Todo: Handle divIDe by zero senario. } } catch (Exception e) { // Todo: Handle casting exceptions. } } return result; } public object ConvertBack(object value,System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion
如果你想在同一个Binding中加入除法和减法,你需要创建一个特殊的转换器,或者使用MultiBinding(这也需要你创建一个特殊的MultiBindingConverter).
总结以上是内存溢出为你收集整理的wpf – 我们可以在模板出价时 *** 纵(减去)属性的值吗?全部内容,希望文章能够帮你解决wpf – 我们可以在模板出价时 *** 纵(减去)属性的值吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)