- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个数据模板,它为 Canvas ItemsPanel 在内部绘制的每个 NodePairViewModel 定义了一条显示线。当所表示的 NodePairViewModel 的 IsChecked 属性按照样式中的定义(见下文)发生变化时,线条颜色应该发生变化,但是当设置此属性时,颜色不会发生变化。 INotifyPropertyChanged 已实现,我已验证此事件正在触发。我看不出有什么明显的错误,相同的设置适用于也在同一项目面板中绘制的 NodeViewModels。
<DataTemplate DataType="{x:Type vm:NodePairViewModel}">
<Line Canvas.ZIndex="2" Name="Arc" Stroke="Blue" StrokeThickness="3"
X1="{Binding Path=NodeA.PositionX, Mode=OneWay, Converter={StaticResource NodeLinkXConverter}}"
X2="{Binding Path=NodeB.PositionX, Mode=OneWay, Converter={StaticResource NodeLinkXConverter}}"
Y1="{Binding Path=NodeA.PositionY, Mode=OneWay, Converter={StaticResource NodeLinkYConverter}}"
Y2="{Binding Path=NodeB.PositionY, Mode=OneWay, Converter={StaticResource NodeLinkYConverter}}"
MouseLeftButtonDown="Arc_MouseLeftButtonDown" MouseLeftButtonUp="Arc_MouseLeftButtonUp">
<Line.Style>
<Style TargetType="Line">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsChecked}" Value="True">
<Setter Property="Stroke" Value="Orange"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected, Mode=OneWay}" Value="True">
<Setter Property="Stroke" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsRejected, Mode=OneWay}" Value="True">
<Setter Property="Stroke" Value="LightGray"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsVisited}" Value="True">
<Setter Property="Stroke" Value="LightGreen"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Line.Style>
</Line>
</DataTemplate>
<ItemsControl Name="NodeSpace" ItemsSource="{Binding GraphItems}" Margin="5" MouseMove="NodeSpace_MouseMove" MouseDown="NodeSpace_MouseDown" MouseLeftButtonUp="NodeSpace_MouseLeftButtonUp" MouseLeftButtonDown="NodeSpace_MouseLeftButtonDown" MouseRightButtonDown="NodeSpace_MouseRightButtonDown" RenderTransformOrigin="0.5,0.5" Grid.Column="1" Grid.Row="1">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Name="GraphSurface" Background="#FFFFFE"></Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left">
<Setter.Value>
<Binding Mode="OneWay" Path="PositionX" Converter="{StaticResource XInverseConverter}"/>
</Setter.Value>
</Setter>
<Setter Property="Canvas.Top">
<Setter.Value>
<Binding Mode="OneWay" Path="PositionY" Converter="{StaticResource YInverseConverter}"/>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
以及 IsChecked 属性本身
private bool ArcIsChecked = false;
public bool IsChecked
{
get
{
return ArcIsChecked;
}
set
{
ArcIsChecked = value;
RaisePropertyChanged("IsChecked");
}
}
最佳答案
您需要从 Line
移动默认值
<Line ... Stroke="Blue">
作为Setter
进入Style
<Line
Canvas.ZIndex="2"
Name="Arc"
StrokeThickness="3"
X1="{Binding Path=NodeA.PositionX, Mode=OneWay, Converter={StaticResource NodeLinkXConverter}}"
X2="{Binding Path=NodeB.PositionX, Mode=OneWay, Converter={StaticResource NodeLinkXConverter}}"
Y1="{Binding Path=NodeA.PositionY, Mode=OneWay, Converter={StaticResource NodeLinkYConverter}}"
Y2="{Binding Path=NodeB.PositionY, Mode=OneWay, Converter={StaticResource NodeLinkYConverter}}"
MouseLeftButtonDown="Arc_MouseLeftButtonDown"
MouseLeftButtonUp="Arc_MouseLeftButtonUp">
<Line.Style>
<Style TargetType="{x:Type Line}">
<Setter Property="Stroke" Value="Blue"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsChecked}" Value="True">
<Setter Property="Stroke" Value="Orange"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected, Mode=OneWay}" Value="True">
<Setter Property="Stroke" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsRejected, Mode=OneWay}" Value="True">
<Setter Property="Stroke" Value="LightGray"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsVisited}" Value="True">
<Setter Property="Stroke" Value="LightGreen"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Line.Style>
</Line>
根据 Dependency Property Setting Precedence List
样式触发器在层次结构中低于本地值,因此它无法覆盖您的默认(本地)值
关于c# - 绑定(bind)值更改时未设置 WPF DataTrigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28221778/
我想使用带有 DataTrigger 的样式来定义 ResourceDictionary 中控件的一般外观。 是否可以在 View 中指定DataTrigger绑定(bind)路径?如果没有,是否有一
我需要根据用户与搜索功能的交互动态添加 DataTrigger,因此无法在 XAML 中完成。但是,从下面的 XAML 代码中可以看出我正在尝试做的事情的基本目标。它需要根据 ToggleButton
我有一个名为 OperativeCount 的值。当此数字大于 10 时,我希望 DataGridColumn 的颜色发生变化。类似于此; 10"
我在我的 XAML 中定义了一个 DataTrigger,我想在多个地方使用它。是否可以将其定义为资源然后共享? 这是我的触发器:
所以这是我的 XAML:
我正在尝试将我的一些 WPF 技能转换为 Silverlight,并且在我一直在开发的测试迷你应用程序中遇到了一个稍微奇怪的问题。在 WPF 中,我习惯于在样式中使用 DataTriggers 来根据
是否可以使用 DataTrigger 在 WPF 中设置 RotateTransform 的角度?如果是这样,如何? 最佳答案 当然,这样的事情应该有效
我知道我可以创建一个 setter 来检查值是否为 NULL 并执行某些操作。示例:
所以我刚刚加入了一个 Windows Phone 团队,他们倾向于按照以下方式做一些事情: 我查看了它并心想:代码重复,将 2 个元素加载到 UI,这(虽然很小)加载了不必要的内存 - 为什么在任
正如 WPF 经常发生的那样,我可能会以错误的方式处理事情,但我有以下情况: 我想根据 DataTrigger 应用样式,但您不能从样式内部更改样式:
我希望我的 TextBox 有一个 红色背景如果 ViewModel 属性 =“ 无效 ”。我必须改变什么才能有效? 这个版本告诉我背景没有合格的类型名称 .
我有几个项目控件,我需要为它们附加一个事件处理程序 PreviewMouseLeftButtonDown 事件仅在满足某个条件时发生。 我用数据触发器为我的控件设计了一种样式,我检查了它的绑定(bin
当我的绑定(bind)表字段时,我希望我的图像可见性属性设置为隐藏 Weblink = NULL **OR** Weblink = "" 使用 MultiDataTrigger,您可以按以下逻辑测试多
有没有人有一个成功的解决方法来根据基础数据对象的属性更改 Silverlight 中的样式,因为当值更改时,样式也会更改。我简要地使用了 WPF,它显然有 DataTrigger,它似乎涵盖了这一点,
【原创】 我有一个 ListBox有它的ItemsSource (这是在创建窗口时在后面的代码中完成的)数据绑定(bind)到 ObservableCollection . ListBox然后有以下D
我正在使用 MVVM,所以我需要绑定(bind)一个矩形形状的属性,该属性最终会对其进行动画处理。 我发现很少solutions并试图复制他们的方法,但故事范围没有发挥作用 我包括我的源代码
我有一个动画可以将边框(使用渲染转换变换)移动到它的宽度。此动画需要应用于多个边框,并且这些边框的宽度会有所不同。所以我将动画关键帧的 Value 属性绑定(bind)到边框的 ActualWidth
我有一个 WPF 数据触发器,该触发器设置为在值为 true 时触发。 我希望每次该值设置为 true 时都会触发此触发器,即使它之前是 true。不幸的是,它似乎只有在值从 true 更改为 fal
我有一个数据模板。它有两种视觉状态——展开、折叠。我添加了 2 个 GoToStateAction-s。第一个在数据上下文属性变为 True 时进入 Expanded 状态,第二个在同一属性变为 Fa
我是一名优秀的程序员,十分优秀!