精华内容
下载资源
问答
  • 2021-10-13 09:23:00

    目的:想要让Border.Background属性根据多个值的结果进行颜色改变

    方法:使用了WPF中的多值绑定(MultiBinding和IMultiValueConverter)

    问题:发现没有颜色出现

    解决方法:

    1.一开始我以为是Border.Background属性不支持多值绑定,因为我看了一下别人的多值绑定使用和我的方法一致。不过网上很少有关于Background属性的多值绑定,都是Text属性的多值绑定,所以导致了我的猜测,不过事实证明,WPF的多值绑定没有任何问题。

    3.使用调试,发现值已经传过去了,可是发生了一个错误。原来不能直接将“Red”做为有效值传给Border.Background,因为该属性是Brush类型的,最终解决方法就是将转换器中的返回值“Red”改为Brushes.Red。

    更多相关内容
  • 当一个控件的某个属性需要绑定到的时候,需要使用MultiBinding. 例子1 一个文本显示Person的Name和Age <TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}Name:{0},Age:{1}">...

    MultiBinding

    当一个控件的某个属性需要绑定到多个值的时候,需要使用MultiBinding.

    例子1

    一个文本显示Person的Name和Age

     <TextBlock>
       <TextBlock.Text>
           <MultiBinding StringFormat="{}Name:{0},Age:{1}">
               <Binding Path="Person.Name"></Binding>
               <Binding Path="Person.Age"></Binding>
           </MultiBinding>
       </TextBlock.Text>
    </TextBlock>
    

    例子2

    在这里插入图片描述
    当1,2,3都被选中时,下面的红色框隐藏,不使用后台代码逻辑。
    这个时候,使用MultiBinding+MultiValueConverter可实现需求
    首先定义多值转换器:

     public class ToVisibilityMultiValueConverter : IMultiValueConverter
     {
          public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
          {
              if (values == null || values.Length != 3) return Visibility.Visible;
    
              if (values[0] == null || values[1] == null || values[2] == null) return Visibility.Visible;
    
              return ((bool)values[0] && (bool)values[1] && (bool)values[2]) ? Visibility.Collapsed : Visibility.Visible;
          }
    
          public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
          {
              throw new NotImplementedException();
          }
      }
    

    XAML如下:

    <Window x:Class="MultiBindingTest.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:local="clr-namespace:MultiBindingTest"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            Title="MainWindow"
            Width="300"
            Height="250"
            mc:Ignorable="d">
        <Window.Resources>
            <local:ToVisibilityMultiValueConverter x:Key="ToVisibilityMultiValueConverter" />
        </Window.Resources>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="40" />
                <RowDefinition />
            </Grid.RowDefinitions>
            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
                <CheckBox x:Name="chk1" Margin="5" Content="1" />
                <CheckBox x:Name="chk2" Margin="5" Content="2" />
                <CheckBox x:Name="chk3" Margin="5" Content="3" />
            </StackPanel>
            <Rectangle Grid.Row="1" Width="100" Height="100" Fill="Red">
                <Rectangle.Visibility>
                    <MultiBinding Converter="{StaticResource ToVisibilityMultiValueConverter}">
                        <Binding ElementName="chk1" Path="IsChecked" />
                        <Binding ElementName="chk2" Path="IsChecked" />
                        <Binding ElementName="chk3" Path="IsChecked" />
                    </MultiBinding>
                </Rectangle.Visibility>
            </Rectangle>
    
        </Grid>
    </Window>
    
    

    MultiTrigger

    与Trigger属性对应
    当一个或多个控件本身的其他属性的值共同达到某一个条件时,触发一组属性变化。
    使用场景:例如鼠标在按钮上且鼠标按下时,按钮的颜色为蓝色

    MultiDataTrigger

    与DataTrigger对应
    当一个或多个DataContext中的值达到某一个条件来触发操作时,需要使用MutiDataTrigger.
    使用场景:
    例如 一个按钮的DataContext中有一个对象Person,当Person的Name为“Tony”且Age为20时,按钮的背景色为黄色

     <MultiTrigger>
        <MultiTrigger.Conditions>
            <Condition Property="IsMouseOver" Value="true"></Condition>
            <Condition Property="IsPressed"
                       Value="true"></Condition>
        </MultiTrigger.Conditions>
        <MultiTrigger.Setters>
            <Setter Property="Background" Value="blue"></Setter>
        </MultiTrigger.Setters>
    </MultiTrigger>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding Person.Name}"
                       Value="Tony"></Condition>
            <Condition Binding="{Binding Person.Age}"
                       Value="20"></Condition>
        </MultiDataTrigger.Conditions>
        <MultiDataTrigger.Setters>
            <Setter Property="Background"
                    Value="Yellow"></Setter>
        </MultiDataTrigger.Setters>
    </MultiDataTrigger>
    
    展开全文
  • WPF可以使用MultiBinding进行多值绑定,使用IMultiValueConverter进行多值转换 例: (1)转换器 public class ContentConverter : IMultiValueConverter { //源属性传给目标属性时,调用此方法...

    WPF可以使用MultiBinding进行多值绑定,使用IMultiValueConverter进行多值转换

    例:

    (1)转换器

        public class ContentConverter : IMultiValueConverter
        {
            //源属性传给目标属性时,调用此方法ConvertBack
            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
                if (values == null || values.Length == 0)
                    throw new ArgumentNullException("values can not be null");
    
                string s = "";
                foreach (var item in values)
                {
                    s += System.Convert.ToString(item);
                }
    
                return s;
            }
    
            //目标属性传给源属性时,调用此方法ConvertBack
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                return null;
            }
        }
    

    (2)绑定

        <Window.Resources>
            <local:ContentConverter x:Key="content"></local:ContentConverter>
        </Window.Resources>
        <Grid>
            <Label HorizontalAlignment="Left" Height="23" Margin="243,208,0,0" Foreground="{Binding Status,Converter={StaticResource foreColor},Mode=OneWay}" VerticalAlignment="Top" Width="120">
                <Label.Content>
                    <MultiBinding Converter="{StaticResource content}">
                        <Binding Path="Str1"/>
                        <Binding Path="Str2"/>
                        <Binding Path="Str3"/>
                    </MultiBinding>
                </Label.Content>
            </Label>
            <Button Content="Button" HorizontalAlignment="Left" Margin="35,44,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
        </Grid>
    

    (3)button click事件

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                window2ViewModel.Str1 = "1";
                window2ViewModel.Str2 = "2";
                window2ViewModel.Str3 = "3";
            }
    

    (4)效果  lable显示 str1,str2和str3相加后的字符串

     

     

      

     

    转载于:https://www.cnblogs.com/yaosj/p/11240275.html

    展开全文
  • WPF多值转换器IMultiValueConverter

    千次阅读 2020-07-26 21:47:45
    在实际的开发中,经常会有这样的需要,当一个属性变化时,需要其他属性一起联动发生变化。这种变化如果只是后台之间属性之间的约束,直接写在...WPF的转换器分为单转换器,和多值转换器。既然是属性变化影响的是其...

            在实际的开发中,经常会有这样的需要,当一个属性变化时,需要其他属性一起联动发生变化。这种变化如果只是后台之间属性之间的约束,直接写在后台代码中也无所谓,甚至可以说是这样组织是一个不错的策略。

             但是,如果这种变化只体现在界面的联动效果上,比如属性A的变化,影响到属性B在界面上是否可以编辑。在这种场景中,如果后台代码过分干预前台的显示效果,反而显得设计过于耦合了。我们可以把这种变化,通过转换器在前台实现控制。WPF的转换器分为单值转换器,和多值转换器。既然是属性变化影响的是其他属性的先关显示,这样的情况使用单值转换器就很难起到灵活监控属性变化的作用了。这里就引入了多值转换器。

    1、实现一个多值转换器,继承IMultiValueConverter

        /// <summary>
        /// 楼层面积是否可用
        /// </summary>
        public class FloorAreaEnableConverter : IMultiValueConverter
        {
            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
                try
                {
                    if (values == null || !values.Any())
                        return false;
                    BuildingFunction function = values[0] as BuildingFunction;
                    if (function == null)
                        return false;
                    var enable = function.ElevationRange != null && function.ElevationRange.ToString() == ">24m";
                    if (!enable&&!string.IsNullOrWhiteSpace(function.FloorArea))
                        function.FloorArea = string.Empty;
                    return enable;
                }
                catch (Exception)
                {
    
                    return false;
                }
            }
    
    
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }

    2、在WPF前台界面对定义的多值转换器进行使用

    <ComboBox.IsEnabled>
    <MultiBinding Converter="{StaticResource FloorAreaEnable}">
                     <Binding ></Binding>
                      <Binding Path="ElevationRange"></Binding>
                      <Binding Path="FloorArea"></Binding>
    </MultiBinding>
    </ComboBox.IsEnabled>

     

     

    展开全文
  • WPF控件输入验证

    2022-01-07 10:40:31
    /// 数据验证 /// </summary> public class ValidationExtensionRules { //校验数字的表达式 /// <summary> /// 数字 /// </summary> /// <param name="_val">&
  • WPF中使slide控件拖动完成后改变变量这个问题一开始觉得还是挺简单的,网上也看到不少解决方案。 首先一个最简单最直接的方案就是自定义一个名为FinalValue的依赖属性。随后重载OnThumbDragCompleted函数,在Thumb...
  • WPF多页面Page导航实例

    2019-03-21 11:40:53
    这是一个通过WPF Frame控件实现个Page之间的导航功能实例
  • 二、多值转换代码:    /// <summary> 根据参考范围确定状态  [ValueConversion(typeof(string), typeof(string))]  public class MultiStringStateConverter : IMultiValueConverter  {  public...
  • 程序是面对客户使用的,不得不考虑语言环境。该案例通过资源字典加绑定的方式实现语言动态切换。
  • WPF 转换器(Converter)的使用

    千次阅读 2020-11-09 21:35:51
    WPF 转换器(Converter)的使用 示例一、ViewModel层int型属性Gender绑定界面表示性别的两个RadioButton,Gender=1表示男,Gender=2表示女; 窗体xaml代码: <Window x:Class="WpfApp1.MainWindow" xmlns=...
  • WPF单选按钮和枚举

    2021-04-08 08:17:31
    一种将一组WPF单选按钮绑定到枚举的解决方案。
  • WPF】转换器Converter

    2021-12-22 16:17:48
    作用:完成源和绑定目标的之间的转换 Convert:将原值转换为绑定目标的。数据绑定引擎在将该从源绑定传播到绑定目标时会调用到此方法 ConvertBack:将绑定目标转换为源绑定 转换器:实现 ...
  • WPF DataTrigger按TextBox触发条件,按输入的颜色英文改变字体,边框,字体大小,其它可按自已需求修改代码.
  • WPF中的管道转换器

    2021-04-02 17:59:50
    演示如何将WPF数据绑定中使用的转换器链接在一起。
  • WPF的DataGrid展示数据源数据时,需要根据某行中某一字段,来显示背景颜色。这里简单做了一个int类型的,为0的时候为橙色,为1的时候为草绿色....也可以在数据源中添加Color列,并直接存放Color的16进制,并...
  • WPF 转换器Demo,有普通转换器与多值转换器
  • WPF通过USD HID方式获取扫描枪,内有Demo 主要通过RawInput
  • WPF自带的控件中只有Datepicker这个控件,不足以满足功能,鉴于WPF强大的自定义控件Usercontrol的功能,所以修改了一个支持选择日期时间控件---DateTimePicker,
  • WPF值转换器使用

    2015-02-27 09:00:19
    WPF中转换器的使用,将bool转换为FlowDirection类型。
  • WPF中枚举的应用

    2021-02-22 15:01:37
    今天用到了需要再wpf的用户控件中将枚举以参数的方式传递到ViewModel,搜索了很资料都是将枚举绑定到列表或者Combox的数据源中,经过次尝试可以将枚举中的单个以参数的方式传递到ViewModel了,进行一下记录。...
  • 本文实例为大家分享了WPF定时刷新UI界面展示的具体代码,供大家参考,具体内容如下 代码: using NHibernate.Criterion; using System; using System.Collections.Generic; using System.Collections.ObjectModel; ...
  • 这是我的博客 里提到的 表格使用的整个项目代码
  • wpf 两滑块取中间。 源地址:https://www.cnblogs.com/lekko/archive/2012/07/23/2604257.html
  • CommandParameter 参数传递 /// public class ObjectConvert : IMultiValueConverter { #region IMultiValueConverter Members public static object ConverterObject; public ...
  • 前台代码声明: <UserControl.Resources> <local:CommConverter x:Key="commConvertMethod" /> <local:DateConverter x:Key="DateConvertMethod"/>...local:IndicatorConverter x:Key=...
  • WPF、Prism实现ComboBox省市县三级级联,完整代码,可运行。
  • WPF实现ProgressBar气泡显示进度

    热门讨论 2014-01-03 21:39:57
    主要是做了个ProgressBar气泡的气泡样式,然后重写ProgressBar,加了个依赖属性,很简单,大家可以down来研究,用blend打开来看比较直观。
  • WPF中DataGrid里面的Checkbox实现单选关键代码, 文档里面的代码复制粘贴即可实现!本人也是项目需要写的一个功能11行代码实现此功能! 希望可以帮助到你们!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,680
精华内容 13,472
关键字:

wpf多值