如何在XAML中删除故事板(即DataTrigger中的RemoveStoryboard操作),但保留动画的值.与Animatable.BeginAnimation类似:
如果动画的BeginTime为null,则将删除任何当前动画,并保留属性的当前值.
我正在尝试DataTrigger为Image元素定义一个元素,以便它显示连接/断开连接的图像.我不断收到Invalid PropertyDescriptor消息.有任何想法吗?
<Image>
<Image.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Source={x:Static my:Server.Instance}, Path=Connected, Mode=OneWay}"
Value="True">
<Setter Property="Source"
Value="serverconnected.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
Run Code Online (Sandbox Code Playgroud) 我有以下xaml:
<DockPanel>
<DockPanel>
<CheckBox IsChecked="{Binding Path=Test}" />
<CheckBox IsChecked="{Binding Path=Test}" />
</DockPanel>
<DockPanel DockPanel.Dock="Left" Width="10" Background="Blue">
<DockPanel.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Test}" Value="True">
<Setter Property="DockPanel.Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
</DockPanel.Style>
</DockPanel>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
现在 - 2个复选框正确链接 - 检查一个将检查另一个 - 但数据触发器根本没有触发.
我究竟做错了什么?
我正在编写一个XAML文件,该文件使用DataTrigger在ViewModel中设置属性.ViewModel类定义为:
public class ShellModel : INotifyPropertyChanged
{
public Brush ForegroundBrush
{
get; set;
}
....................
}
Run Code Online (Sandbox Code Playgroud)
我想在View.xaml中使用DataTrigger来设置属性ForegroundBrush.我写的XAML是:
<StatusBar Name="statusBar" Grid.Row="3">
<StatusBarItem>
<StatusBarItem.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding HasError}" Value="True">
<Setter Property="ForegroundBrush" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding HasError}" Value="False">
<Setter Property="ForegroundBrush" Value="Black" />
</DataTrigger>
</Style.Triggers>
</Style>
</StatusBarItem.Style>
<TextBlock Name="statusBarMessage" Foreground="{Binding ForegroundBrush}" Text="{Binding StatusMessage}"></TextBlock>
</StatusBarItem>
........................
Run Code Online (Sandbox Code Playgroud)
这不编译.当我改变了
<Setter Property="ForegroundBrush" Value="Black" />
Run Code Online (Sandbox Code Playgroud)
至
<Setter Property="ShellModel.ForegroundBrush" Value="Black" />
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
依赖属性字段缺失....
我该怎么写这个,以便DataTrigger可以在ViewModel中设置属性ForegroundBrush?
我有一张桌子Product和另一张桌子ProductLog.
日志表需要跟踪表中的两列Product.每次在这些列上都有插入,更新或删除时,我需要更新日志表.
我是否需要编写三个单独的触发器,或者一个触发器可以处理这些操作?
我还需要知道操作的类型,例如,我需要知道日志表中的条目是否是因为插入或删除或更新.如果有人给我一个很好的例子.
我希望有一个故事板开始,每当MyCounter变化的价值.
用一个DataTrigger我只能触发一个特定的值.
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=MyCounter}" Value="Doesn't matter">
<BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
</DataTrigger>
</DataTemplate.Triggers>
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的样式数据触发器,从viewmodel属性中提取它的绑定值,如下所示:
<StackPanel Name="stackTextPanel" Orientation="Horizontal" Margin="0,8,0,0">
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding QuickDrawBarPinned}" Value="False">
<Setter Property="Margin" Value="0,8,0,0" />
</DataTrigger>
<DataTrigger Binding="{Binding QuickDrawBarPinned}" Value="True">
<Setter Property="Margin" Value="0,48,0,0" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
Run Code Online (Sandbox Code Playgroud)
我也试过这个变种
Binding="{Binding Path=QuickDrawBarPinned}"
Run Code Online (Sandbox Code Playgroud)
但是当我按下更改QuickDrawBarPinned属性的按钮时,我仍然无法正常工作我做错了什么?
我已经实现了这个属性:
private bool _quickDrawBarPinned = false;
/// <summary>
/// Indicates if the Quick Draw Bar is pinned (stuck) or unpinned (retractable)
/// </summary>
public bool QuickDrawBarPinned
{
get { return _quickDrawBarPinned; }
set
{
_quickDrawBarPinned = value;
OnPropertyChanged("QuickDrawBarPinned");
}
}
Run Code Online (Sandbox Code Playgroud)
这是实现更改控制的方法
public virtual …Run Code Online (Sandbox Code Playgroud) 我正在尝试检查Xamarin Forms XAML DataTrigger中的绑定对象值是否为null但我无法使其工作.我尝试过以下方法:
<StackLayout IsVisible="True">
<StackLayout.Triggers>
<DataTrigger TargetType="StackLayout"
Binding="{Binding MyObject}"
Value="{x:Null}">
<Setter Property="IsVisible" Value="False"></Setter>
</DataTrigger>
</StackLayout.Triggers>
...
</StackLayout>
Run Code Online (Sandbox Code Playgroud)
有谁知道这样做的方法?我只在Android上测试了这个.
编辑:我已向xamarin bugzilla提交了错误报告https://bugzilla.xamarin.com/show_bug.cgi?id=57863
我创建了一个自定义的WPF元素RowDefinition,当Collapsed元素的属性设置为时,该元素应该折叠网格中的行True.
它通过使用样式中的转换器和数据触发器将行的高度设置为0来实现.它基于此SO答案.
在下面的示例中,当网格分割器超过窗口的一半时,这非常有效.但是,当它不到一半时,行仍然会崩溃,但第一行不会展开.相反,过去的行只有一个白色的间隙.这可以在下图中看到.
同样,如果在任何折叠的行上设置MinHeight或者MaxHeight设置,则它根本不会折叠该行.我尝试通过在数据触发器中为这些属性添加setter来修复此问题,但它没有修复它.
我的问题是什么可以做不同的,这样也没关系有关行的大小或者MinHeight/ MaxHeight设置,它只是能够折叠行?
MCVE
MainWindow.xaml.cs
using System;
using System.ComponentModel;
using System.Globalization;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace RowCollapsibleMCVE
{
public partial class MainWindow : INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private bool isCollapsed;
public bool IsCollapsed
{
get => …Run Code Online (Sandbox Code Playgroud) 我试图找出创建样式/触发器以将前景设置为红色的最佳方法,当值<0时,最好的方法是什么?我假设DataTrigger,但我如何检查负值,我是否必须创建自己的IValueConverter?