我遇到了一个情况,我可以用它来轻松实现相同的功能MultiDataTrigger,或者交替,使用DataTrigger了MultiBinding.是否有任何实质性理由偏好一种方法而不是另一种方法?
使用MultiDataTrigger:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=SomePath}" Value="SomeValue"/>
<Condition Binding="{Binding Path=SomeOtherPath, Converter={StaticResource SomeConverter}}" Value="SomeOtherValue"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
Run Code Online (Sandbox Code Playgroud)
使用MultiBinding:
<DataTrigger Value="foo">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource fooConv}"/>
<Binding Path=SomePath/>
<Binding Path=SomeOtherPath/>
</MultiBinding>
</DataTrigger.Binding>
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/>
</DataTrigger.EnterActions>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud) 我在默认模板中使用TextBox进行自定义控制.自定义控件具有以下2个依赖项属性(以及其他属性):
SelectedValue,NullText(当没有选择任何内容并提供值时,文本将显示在TextBox中)
我想在null为null 时将TextBox.Text设置为NullText值.SelectedValueNullText
<TextBox.Text>
<MultiBinding Converter="{StaticResource myConverter}">
<Binding RelativeSource="TemplatedParent" Path="SelectedValue"/>
<Binding RelativeSource="TemplatedParent" Path="NullText"/>
</MultiBinding>
</TextBox.Text>
Run Code Online (Sandbox Code Playgroud)
我有一个IMultiValueConverter:
public class MyConverter : IMultiValueConverter
{}
Run Code Online (Sandbox Code Playgroud)
有了这个XAML定义,我得到'type没有公共TypeConverter类'Exception
你好吗?
我遇到麻烦Condition了MultiTrigger.如果我执行以下操作:
<Condition Binding="{Binding RelativeSource={RelativeSource
AncestorType={x:Type ListView}}}" Property="IsEnabled" Value="True"/>
Run Code Online (Sandbox Code Playgroud)
然后我得到这个例外:
条件不能同时使用Property和Binding.标记文件中对象'System.Windows.Condition'出错
但是,当我执行以下操作时:
<Condition Binding="{Binding RelativeSource={RelativeSource
AncestorType={x:Type ListView}}, Path=IsEnabled}" Value="True"/>
Run Code Online (Sandbox Code Playgroud)
然后我得到这个例外:
必须为Trigger指定Property和Value.标记文件中对象'System.Windows.Condition'出错
是什么赋予了?如果重要,这是整个触发器:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Binding="{Binding Path=IsSelected}" Value="True"/>
<Condition Binding="{Binding Path=ItemsControl.AlternationIndex}"
Value="0"/>
<Condition Binding="{Binding RelativeSource={RelativeSource
AncestorType={x:Type ListView}}, Path=IsEnabled}"
Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Background"
Value="{StaticResource evenSelected}" />
<Setter Property="BorderBrush"
Value="{StaticResource evenSelectedBorder}" />
</MultiTrigger>
Run Code Online (Sandbox Code Playgroud) 我有一个MainMenuButton类型的自定义按钮UserControl和atm我正在设计它.现在我想实现一个MultiTrigger只在满足两个条件时才改变按钮的外观.
第一个条件是if IsMouseOver == true.我简单地说如下Condition:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<Setter TargetName="LayoutRoot" Property="Background" Value="Red">
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<Setter TargetName="LayoutRoot" Property="Background" Value="Black">
</MultiTrigger.ExitActions>
</MultiTrigger>
Run Code Online (Sandbox Code Playgroud)
第二个条件与a DependencyProperty:
public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool), typeof(MainMenuButton), new PropertyMetadata(false));
Run Code Online (Sandbox Code Playgroud)
在另一个SO帖子中,用户说我可以DataTrigger用来做出反应IsCheckedProperty.所以我尝试了其他帖子的代码,但它不起作用:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="False"/>
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MouseEnter}"/>
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource MouseLeave}"/>
</MultiTrigger.ExitActions>
</MultiTrigger>
Run Code Online (Sandbox Code Playgroud)
怎么解决这个问题?谢谢你的回答!:)
multitrigger ×4
wpf ×4
triggers ×2
binding ×1
c# ×1
datatrigger ×1
multibinding ×1
textbox ×1
xaml ×1