wpf – 我们可以在模板出价时 *** 纵(减去)属性的值吗?

wpf – 我们可以在模板出价时 *** 纵(减去)属性的值吗?,第1张

概述我目前正在定义几个网格如下: <Grid.RowDefinitions> <RowDefinition Height="{TemplateBinding Height-Height/5}"/> <RowDefinition Height="{TemplateBinding Height/15}"/> <RowDefinition Height="{TemplateBinding 我目前正在定义几个网格如下:

<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 – 我们可以在模板出价时 *** 纵(减去)属性的值吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/999055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存