标签: datatrigger

167
推荐指数
3
解决办法
12万
查看次数

DataTrigger的值是否为null?

我知道我可以创建一个setter来检查一个值是否为NULL并执行某些操作.例:

<TextBlock>
  <TextBlock.Style>
    <Style>
      <Style.Triggers>
        <DataTrigger Binding="{Binding SomeField}" Value="{x:Null}">
          <Setter Property="TextBlock.Text" Value="It's NULL Baby!" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </TextBlock.Style>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

但是如何检查"非"值...如"NOT NULL"或"NOT = 3"?这可能在XAML中吗?

结果:感谢您的回答......我知道我可以做一个值转换器(这意味着我必须使用代码,这不是我希望的纯XAML).但是,这确实回答了在纯XAML中有效"不"你无法做到的问题.但是,选择的答案可能是创建这种功能的最佳方式.很好找.

wpf xaml binding visibility datatrigger

150
推荐指数
9
解决办法
15万
查看次数

Trigger和DataTrigger之间有什么区别?

他们似乎是一样的.有显着差异吗?我想我错过了什么.

wpf triggers datatrigger

45
推荐指数
3
解决办法
1万
查看次数

如何让DataTemplate.DataTrigger检查大于或小于?

以下DataTemplate.DataTrigger使年龄显示为红色,如果它等于 30.

如果年龄显示大于 30,如何使年龄显示为红色?

<DataTemplate DataType="{x:Type local:Customer}">
    <Grid x:Name="MainGrid" Style="{StaticResource customerGridMainStyle}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="150"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Grid.Row="0" Text="First Name" Margin="5"/>
        <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding FirstName}" Margin="5"/>
        <TextBlock Grid.Column="0" Grid.Row="1" Text="Last Name" Margin="5"/>
        <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding LastName}" Margin="5"/>
        <TextBlock Grid.Column="0" Grid.Row="2" Text="Age" Margin="5"/>
        <TextBlock x:Name="Age" Grid.Column="1" Grid.Row="2" Text="{Binding Age}" Margin="5"/>
    </Grid>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Age}">
            <DataTrigger.Value>30</DataTrigger.Value>
            <Setter TargetName="Age" Property="Foreground" Value="Red"/> 
        </DataTrigger>
    </DataTemplate.Triggers>

</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

wpf xaml datatrigger datatemplate

44
推荐指数
3
解决办法
5万
查看次数

WPF触发器基于对象类型

有没有办法对触发器的对象类型进行比较?

<DataTrigger Binding="{Binding SelectedItem}" Value="SelectedItem's Type">
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

背景:我有一个工具栏,我想要隐藏按钮,具体取决于当前为所选项目对象设置的子类.

谢谢

wpf xaml binding types datatrigger

36
推荐指数
5
解决办法
2万
查看次数

WPF Datatrigger在预期时未触发

我有以下XAML:

<TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Margin="0,0,5,0"/>
<TextBlock Text="items selected">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">
                    <Setter Property="TextBlock.Text" Value="item selected"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

第一个文本块愉快地使用SelectedItems.Count更改,显示0,1,2等.第二个块上的数据触发器似乎永远不会触发更改文本.

有什么想法吗?

wpf datatrigger

29
推荐指数
2
解决办法
2万
查看次数

MultiDataTrigger与具有多重绑定的DataTrigger

我遇到了一个情况,我可以用它来轻松实现相同的功能MultiDataTrigger,或者交替,使用DataTriggerMultiBinding.是否有任何实质性理由偏好一种方法而不是另一种方法?

使用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)

wpf datatrigger multitrigger multibinding

29
推荐指数
2
解决办法
2万
查看次数

在WPF中,如何调试触发器?

在WPF中,调试触发器的一些好方法是什么?

<Trigger Property="IsMouseOver" Value="True">  
   <Setter Property="FontWeight" Value="Bold"/>  
</Trigger>
Run Code Online (Sandbox Code Playgroud)

理想的情况是:

  • 如果触发器被命中,我想Debug在Visual Studio中写一条消息写入窗口;
  • 如果触发器被命中,我希望Visual Studio在我的C#代码中找到一个断点.

.net c# wpf datatrigger

29
推荐指数
1
解决办法
4677
查看次数

触发器集合成员必须是EventTrigger类型

我创建了一个UserControl,类似于以下内容:

<UserControl>
    <StackPanel Orientation="Vertical">

        <StackPanel x:Name="Launch" Orientation="Horizontal" Visibility="Collapsed">
            <!-- Children here -->
        </StackPanel>

        <ToggleButton x:Name="ToggleLaunch" IsChecked="False" Content="Launch" />

    </StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用DataTrigger使"启动"StackPanel在检查ToggleButton时变得可见,否则保持折叠状态.但是,在运行时我收到一条错误,指出"失败的对象初始化(ISupportInitialize.EndInit).触发器集合成员必须是EventTrigger类型".我已经尝试将它添加到UserControl和StackPanel的触发器集合中但没有成功.我的触发器XAML如下所示:

<DataTrigger Binding="{Binding ElementName=ToggleLaunch, Path=IsChecked}" Value="True">
    <Setter TargetName="Launch" Property="UIElement.Visibility" Value="Visible" />
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

.net wpf datatrigger

25
推荐指数
4
解决办法
2万
查看次数

wpf - 无论新值如何,属性更改时触发datatrigger

我正在尝试在datagrid单元格的值更改时在数据网格中的单元格上执行动画.

datagrid本身绑定到普通旧CLR对象的ObservableCollection.在这种情况下,假设对象是具有"名字","姓氏"和"年龄"属性的"人物"对象.'Person'类实现了INotifyPropertyChanged接口,每个属性都在其setter中对onPropertyChanged进行了适当的调用.

这一切都很好.在datagrid定义中,我设置了我的DataTemplate来绘制每个单元格并附加了一个datatrigger ......如下所示:

<DataGridTemplateColumn Header="FirstName">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Border Name="templateBorder">
                <TextBlock Name="templateTextBlock" Text="{Binding Path=FirstName}" />
            </Border>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Path=FirstName}" Value="Richard">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard AutoReverse="True">
                                <DoubleAnimation Storyboard.TargetName="templateTextBlock" Storyboard.TargetProperty="Opacity" To=".1" Duration="0:0:.5" />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

当我的ObservableCollection中的对象更新(我更改了FirstName值)时,数据网格会更新.根据上面的例子,如果我将FirstName的值更改为'Richard',那么动画也可以正常执行.

我的问题是我需要运行我的动画,无论Firstname的新值是什么.我已经爬网了,但有些人似乎只能找到触发已知值的触发器的例子,例如当FirstName是'Richard'时触发,就像我在我的例子中所展示的那样.

我的问题是,无论更新属性的值如何,我如何触发数据触发器?因此,基本上如何在为数据网格中的给定行更新FirstName属性时触发数据触发器.

非常感谢.

wpf datagrid datatrigger

25
推荐指数
1
解决办法
2万
查看次数