标签: datatrigger

边框背景上的Style.DataTrigger

我有下面的边框.为什么我的TextBlock的前景正常工作但边框的背景始终保持不变(就好像IsDeleted属性始终为false)

<Border DockPanel.Dock="Top" BorderBrush="Black" Background="#CBE2FF" BorderThickness="2" CornerRadius="5" Padding="0" Margin="5">
    <Border.Style>
        <Style TargetType="{x:Type Border}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsDeleted}" Value="True">
                    <Setter Property="Background" Value="#A00000"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
    <TextBlock Margin="5" FontWeight="Bold" FontSize="14" Text="Queue Details">
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsDeleted}" Value="True">
                        <Setter Property="Foreground" Value="White"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</Border>
Run Code Online (Sandbox Code Playgroud)

xml wpf styles border datatrigger

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

WPF动画"无法冻结此Storyboard时间轴树以跨线程使用"

我目前有一个列表框,其选定的项目绑定到我的ViewModel上的属性.每当所选项目不为null时,我想在其上执行动画.但是,我不断收到以下错误"无法冻结此故事板时间轴树以供跨线程使用",并且从研究中了解为什么会发生这种情况.但是我不确定我需要采取什么方法来获得我想要的行为.

<Storyboard x:Key="ShowItemEdit">
    <DoubleAnimation
        Storyboard.TargetName="lstItemList"
        Storyboard.TargetProperty="ListBox.Width"
        To="{Binding ActualWidth, ElementName=UserControl}"
        Duration="0:0:0.40" />
    ...
</Storyboard>

<Style x:Key="ListStyle">
    <Style.Triggers>
        <DataTrigger Binding="{Binding SelectedItem, Converter={StaticResource IsNullConverter}}" Value="False">
            <DataTrigger.EnterActions>
            <BeginStoryboard Storyboard="{StaticResource ShowItemEdit}" />
        </DataTrigger.EnterActions>
        </DataTrigger>
     </Style.Triggers>
</Style>

<ListBox x:Name="lstItemList" Style={StaticResource ListStyle}" SelectedItem="{Binding SelectedItem}">
    ...
</ListBox>
Run Code Online (Sandbox Code Playgroud)

wpf animation xaml datatrigger mvvm

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

如何在DataTrigger中切换TextBlock的可见性?

此代码有效(当ControlType ="dropDown"时,背景为黄色):

<Window x:Class="TestCollapsed.Views.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:TestCollapsed.Commands"
    Title="Main Window" Height="400" Width="800">
    <Window.Resources>
        <Style x:Key="DropDownStyle" TargetType="TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ControlType}" Value="dropDown">
                    <Setter Property="Background" Value="Yellow"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

    <StackPanel>
        <TextBlock Visibility="Visible" 
                   Text="This is going to be the dropdown control."
                   Style="{StaticResource DropDownStyle}"/>
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

但是这个代码不无法正常工作(当ControlType ="下拉列表",然后将TextBlock仍然是不可见的):

<Window x:Class="TestCollapsed.Views.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:TestCollapsed.Commands"
    Title="Main Window" Height="400" Width="800">
    <Window.Resources>
        <Style x:Key="DropDownStyle" TargetType="TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ControlType}" Value="dropDown">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

    <StackPanel>
        <TextBlock Visibility="Collapsed" …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml datatrigger

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

你可以将DataTrigger绑定到附加属性吗?

在WPF中,DataTrigger是否可以绑定到附加属性?

我本质上希望在附加属性上使用转换器,以在特定验证规则被破坏时提供样式.我正在使用如下标记:

<DataTrigger Binding="{Binding Path=Validation.Errors, 
                       RelativeSource={RelativeSource Self}, 
                       Converter={StaticResource RequiredToBoolConverter}}" 
                       Value="True">
  <Setter Property="Background" Value="LightGreen" />
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

但是,当这运行时,我得到以下内容:

System.Windows.Data错误:39:BindingExpression路径错误:'object'''TextBox'(Name ='')'上找不到'Validation'属性.BindingExpression:路径= Validation.Errors; DataItem ='TextBox'(Name =''); target元素是'TextBox'(Name =''); target属性是'NoTarget'(类型'对象')

如果我将DataTrigger绑定路径更改为"Text",我不会得到数据绑定错误(但当然它不提供我正在寻找的行为).

wpf binding datatrigger

19
推荐指数
1
解决办法
7207
查看次数

在DataTrigger条件中使用绑定

假设我有以下简单类:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class PersonHolder
{
    public Person CurrentPerson { get; set; }
    public int ActiveId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我有类PersonH​​older的实例为栅格DataContext,和在网格我有一个StackPanel被绑定到CurrentPersonPersonHolder-表示它的数据:

<Grid>
    <StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}">
        <TextBlock Text="{Binding Id}" />
        <TextBlock Text="{Binding Name}" />            
    </StackPanel>        
</Grid>
Run Code Online (Sandbox Code Playgroud)

所以-这个问题:我如何给StackPanel在绿色背景CurrentPerson有一个Id匹配ActiveId的的PersonHolder(是的,非常有用的,但是这仅仅是一个非常简单的例子..).我的想法是,这是一个使用触发器的东西,但我可以在触发条件值中使用绑定吗?如果是这样我可以这样做:

<Grid x:Name="Foo">
    <StackPanel x:Name="PersonPanel" …
Run Code Online (Sandbox Code Playgroud)

.net data-binding wpf datatrigger

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

什么是Silverlight中DataTrigger的替代品

这是我的情景.

我有2个属性.类型和状态.

类型是具有3个值的枚举,例如球,汽车,箭头.State是一个int,可以接受3个状态值,例如-1,0,1.另外,我有每个状态值的9个图像.

就像,如果我选择类型为球,值为-1,我想显示一个红色球.如果我选择类型为箭头并将值选为1,我想显示向上箭头.等等.,

我能够在WPF中做到这一点.我创建了3个带有空图像的DataTemplates.然后,我使用DataTrigger检查并更新所选StateValue的特定图像.

但是,在silverlight中我该怎么做呢.我知道,我必须在VSM中这样做.但是,我想知道关于这个(或)任何可用替代方案的更多细节.

silverlight datatrigger vsm silverlight-4.0

18
推荐指数
4
解决办法
1万
查看次数

绑定到DataContext的WPF Style DataTrigger不起作用

我有一个TextBox,其样式有一个DataTrigger,用于更改文本,如下所示:

<Grid>
    <TextBlock Text="Foo">
        <TextBlock.Style>
            <Style BasedOn="{StaticResource TextStyle}" TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding MyBool}" Value="True">
                        <Setter Property="Text" Value="Bar"/>
                    </DataTrigger>
                 </Style.Triggers>
             </Style>
         </TextBlock.Style>
     </TextBlock>
</Grid>
Run Code Online (Sandbox Code Playgroud)

但它不起作用,文本永远不会变为"Bar".我已经使用Text ="{Binding MyBool}"测试了另一个TextBlock,此文本从"False"变为"True".Snoop没有发现我能看到的错误,输出中没有任何内容.

这个问题可能看起来像WPF触发器绑定到MVVM属性的重复,但我的代码似乎与接受的答案不同(http://www.thejoyofcode.com/Help_Why_cant_I_use_DataTriggers_with_controls_in_WPF.aspx,"使用样式"一节)任何相关的方式.并且在实际答案中建议使用DataTemplate似乎是错误的,因为我只希望将其应用于单个TextBlock,但如果它是正确的,我不知道如何为此编写DataTemplate ...

编辑:

这就是我绑定的属性看起来像:

public bool MyBool
{
    get { return _myBool; }
    set
    {
        if (_myBool== value)
            return;

        _myBool= value;
        NotifyPropertyChanged();
    }
}
private bool _myBool;
Run Code Online (Sandbox Code Playgroud)

c# wpf binding datatrigger

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

如何组合DataTrigger和EventTrigger?

注意我已经问过相关问题(有一个接受的答案):如何组合DataTrigger和Trigger?

我想我需要结合一个EventTrigger和一个DataTrigger来实现我所追求的目标:

  • 当一个项目出现在我的ListBox中时,它应该闪烁一会儿
  • 如果该项目是"严重",那么它应该保持突出显示

目前我有一个如下所示的DataTemplate:

<DataTemplate DataType="{x:Type Notifications:NotificationViewModel}">
    <Grid HorizontalAlignment="Stretch">
        <Border Name="Background" CornerRadius="8" Background="#80c0c0c0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        <Border Name="Highlight"  CornerRadius="8" Background="Red"       HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        <!-- snip actual visual stuff -->
        <Grid.Triggers>
            <EventTrigger RoutedEvent="Grid.Loaded">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation x:Name="LoadedAnimation" 
                                             Storyboard.TargetName="Highlight" 
                                             Storyboard.TargetProperty="Opacity" 
                                             From="0" To="1" 
                                             RepeatBehavior="5x" 
                                             Duration="0:00:0.2" 
                                             AutoReverse="True" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Grid.Triggers>
    </Grid>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=IsCritical}" Value="True">
            <Setter TargetName="LoadedAnimation" Property="RepeatBehavior" Value="5.5x" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我们的想法是,在Highlight第一次加载项目时,EventTrigger会将边框的不透明度设置为0到1之间的动画,然后重复返回,从而吸引用户注意它.在DataTrigger确定的时间以动画的数目.如果视图模型报告该项目,IsCritical则动画发生5.5次(使其以不透明度1结束),否则发生5次(以不透明度0结束)

但是上面的XAML不起作用,因为DataTrigger的setter失败了:

在VisualTree中找不到名称为"LoadedAnimation"的子项. …

.net wpf xaml triggers datatrigger

15
推荐指数
1
解决办法
7238
查看次数

为什么我不能将DataTrigger添加到控件的Triggers集合中?

为什么我不能像这样编码

<Border Width="130" Height="70">
    <Border.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="0">
            <Setter Property="Style" Value="{StaticResource ResourceKey=ListBoxItemBorder}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="200">
            <Setter Property="Style" Value="{StaticResource ResourceKey=ListBoxItemBorderInactive}"/>
        </DataTrigger>
    </Border.Triggers>
</Border>
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

Failed object initialization (ISupportInitialize.EndInit). 
Triggers collection members must be of type EventTrigger.  
Error at object '4_T' in markup file
Run Code Online (Sandbox Code Playgroud)

我做错了什么错误的帮助.

wpf datatrigger

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

如何在值不等于的情况下使用数据触发器

我在数据网格中有一个“Delivery Boy”列,它与后面的代码列表绑定。DataGrid 的值动态变化。

<DataTrigger Binding="{Binding Path=delivery_boy}" Value="Not Assigned">
   <Setter Property="Foreground" Value="DarkRed"/>
   <Setter Property="Background" Value="Transparent"/>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

我可以在数据触发器中使用“值”等于,如何在我希望“值”属性为“不等于”的情况下使用数据触发器

<DataTrigger Binding="{Binding Path=delivery_boy}" Value!="Not Assigned">
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="Background" Value="Green"/>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

.net data-binding wpf datatrigger

14
推荐指数
2
解决办法
5850
查看次数