基本上我想按照标题说的那样做,如果列宽为.50那么矩形应该是红色,如果它是.75那么它应该是琥珀色,如果是1则那么它应该是绿色.
我以为我可以使用DataTriggers实现这一点但由于某种原因我得到"对象引用未设置为对象的实例"错误,这是我的代码,我在这里遗漏了什么?
FYI width属性将在后端通过timer_tick事件更改.
<Grid x:Name="Grid1" Width="300" Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition>
<ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.Triggers>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*">
<Setter TargetName="rect" Property="Fill" Value="Red"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*">
<Setter TargetName="rect" Property="Fill" Value="Yellow"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1">
<Setter TargetName="rect" Property="Fill" Value="Green"></Setter>
</DataTrigger>
</Grid.Triggers>
<Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch"></Rectangle>
<Rectangle Grid.Column="1" Fill="Blue"></Rectangle>
</Grid>
Run Code Online (Sandbox Code Playgroud) 我有一种情况,其中有一个共同的控件,在应用程序中使用了几个地方.
现在我已经在一个属性上的数据触发器说A.即
DataTrigger Binding = {Binding A} .......
现在,视图模型中可能不存在属性A,在这种情况下,我需要添加基于属性B的另一个触发器(存在于该ViewModel中).
就像是:
Multidatatrigger
DataTrigger Binding A - doesn't exist
DataTrigger Binding B
Run Code Online (Sandbox Code Playgroud)
做一点事.....
有人可以建议我如何处理这个问题..好像我试图这样做,然后将抛出绑定异常,因为A在当前视图模型中不存在.或任何其他方法在这里工作...谢谢
我有两个绑定到属性(Side)的DataTriggers,但只能启动一个故事板(最后一个DataTriggers中的一个).
为什么?
我觉得最后一个故事板覆盖了第一个故事板
<Border x:Name="layout" Background="Transparent" BorderBrush="#BAC8CE" BorderThickness="1" CornerRadius="5">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<DataTrigger Binding="{Binding Side}" Value="Up">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
Duration="00:00:01"
From="Transparent"
To="Green"/>
<ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
Duration="00:00:00.5"
From="Green"
To="Transparent"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding Side}" Value="Down">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
Duration="00:00:01"
From="Transparent"
To="Red"/>
<ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
Duration="00:00:00.5"
From="Red"
To="Transparent"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
Run Code Online (Sandbox Code Playgroud) 我正在尝试基于datatrigger切换contentpresenter的内容.我想在contentpresenter.content中显示usercontrol,如果我有值集,或者我需要显示错误消息.但是我的datatrigger上的绑定失败声明找不到该属性.我无法获取datacontext继承数据触发器检查.我可以通过使用注释掉的代码使其工作.但我很困惑为什么它不能正常工作.
<ContentPresenter.Style>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Content" Value="{Binding UC}"/>
<Style.Triggers>
<!--<DataTrigger Binding="{Binding DataContext.HasValue,RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}}" Value="false">
<Setter Property="Content" Value="No preview"/>
</DataTrigger>-->
<DataTrigger Binding="{Binding HasValue}" Value="false">
<Setter Property="Content" Value="No value"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentPresenter.Style>
</ContentPresenter>
Run Code Online (Sandbox Code Playgroud) 我想组合来自两个不同ViewModel的DisplayNames,但只有IF第一个不等于NullObject.
我可以在转换器或父视图模型中轻松完成此操作,但我希望我尝试使用DataTrigger有一个简单的修复.
干杯,Berryl
这根本不显示任何内容:
<TextBlock Grid.Column="2" Grid.Row="0" >
<TextBlock.Inlines>
<Run Text="{Binding HonorificVm.DisplayName}"/>
<Run Text="{Binding PersonNameVm.DisplayName}"/>
</TextBlock.Inlines>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding HonorificVm.Honorific}" Value="{x:Static model:Honorific.NullHonorific}">
<Setter Property="Text" Value="PersonNameVm.DisplayName"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Run Code Online (Sandbox Code Playgroud) 我有以下DataGrid单元格,一旦底层LastTradePrice属性更改其值,我想简要地为其背景颜色设置动画.
<DataGridTextColumn Header="Last Trade Price" Binding="{Binding LastTradePrice}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
// ???
<DataTrigger Binding="{Binding LastTradePrice}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="Aqua" Duration="0:0:0.3" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
1)这条线<DataTrigger Binding="{Binding LastTradePrice}" Value="True">没有意义.
该属性LastTradePrice显然不是一个可以测量的布尔值value = True.如何在更新属性时触发触发器?显然我已经实现了INotification:
public double LastTradePrice
{
get { return _model.LastTradePrice; }
set
{
if (value != _model.LastTradePrice)
{
LastTradePrice = value;
OnPropertyChanged("LastTradePrice");
}
}
}
Run Code Online (Sandbox Code Playgroud)
2)如果我将整个样式定义存储在里面<Window.Resources>,我将如何访问ViewModels属性LastTradePrice?
非常感谢
我想合并以下代码,可能使用OR语句来处理可以满足条件的多个值?它变得非常重复,它们必须是一种更好的写作方式
<DataGridTemplateColumn Header="" Width="28">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Image Name="imageEXCEL" Source="/Images/excel.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imageWORD" Source="/Images/word.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imageACCESS" Source="/Images/access.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imagePOWERPOINT" Source="/Images/powerpoint.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imagePUBLISHER" Source="/Images/publisher.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imageONENOTE" Source="/Images/onenote.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imageOUTLOOK" Source="/Images/outlook.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imageVISIO" Source="/Images/visio.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imagePROJECT" Source="/Images/project.png" Visibility="Collapsed" Width="16" Height="16" />
<Image Name="imagePDF" Source="/Images/pdf.png" Visibility="Collapsed" Width="16" Height="16" />
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger …Run Code Online (Sandbox Code Playgroud) 如果在DataGrid中更新了值,我试图将单元格的颜色更改为黄色.
我的XAML:
<toolkit:DataGrid x:Name="TheGrid"
ItemsSource="{Binding}"
IsReadOnly="False"
CanUserAddRows="False"
CanUserResizeRows="False"
AutoGenerateColumns="False"
CanUserSortColumns="False"
SelectionUnit="CellOrRowHeader"
EnableColumnVirtualization="True"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<toolkit:DataGrid.CellStyle>
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsDirty}" Value="True">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</toolkit:DataGrid.CellStyle>
</toolkit:DataGrid>
Run Code Online (Sandbox Code Playgroud)
网格绑定到数组列表(显示类似于excel的值表).数组中的每个值都是一个包含IsDirty依赖项属性的自定义对象.更改值时,将设置IsDirty属性.
当我运行这个:
我希望只有更改的单元格变为黄色,无论它在哪个列中.你看到我的XAML有什么问题吗?
我试图使用数据触发器在边框上设置线性画笔动画但是遇到了无法使用TargetName的问题
我的代码如下,任何人都可以建议一种解决方法吗?
<Border Grid.Row="2" BorderThickness="10" Height="100" Width="100" >
<Border.BorderBrush>
<LinearGradientBrush>
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop x:Name="gradient" Color="Orange" Offset="0.5" />
<GradientStop Color="Yellow" Offset="1.0" />
</LinearGradientBrush>
</Border.BorderBrush>
<Border.Resources>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=testBrdrWin, Path=Pulse}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="gradient"
Storyboard.TargetProperty="Offset"
From="0" To="1" Duration="0:0:1"
AutoReverse="True" RepeatBehavior="Forever"
/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=testBrdrWin, Path=Pulse}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="gradient"
Storyboard.TargetProperty="Offset"
To="0.5" Duration="0:0:01"
AutoReverse="False"
/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Resources>
</Border>
Run Code Online (Sandbox Code Playgroud)
谢谢
哪个是使用表达式混合2013将数据触发器附加到UI元素的正确过程?
如果我直接在xaml中编写datatrigger,它运行良好,但我想知道是否有"视觉方式"来做到这一点.
例如,创建一个listboxitem样式我正在做这样的事情:
<DataTemplate x:Key="BoundingBoxTemplate" DataType="{x:Type is:BoundingBoxViewModel}" >
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsBorderVisible}" Value="True">
<Setter TargetName="InsideRectangle" Property="Stroke" Value="Blue" />
</DataTrigger>
</DataTemplate.Triggers>
<Grid>
<Rectangle x:Name="InsideRectangle"
Width="{Binding Width}"
Height="{Binding Height}"
Fill="Black"
SnapsToDevicePixels="True" />
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
谢谢Lorenzo
datatrigger ×10
wpf ×10
c# ×3
datagrid ×2
mvvm ×2
storyboard ×2
styles ×2
xaml ×2
.net ×1
animation ×1
blend ×1
data-binding ×1
silverlight ×1
wpftoolkit ×1