我正在建立一个WPF自定义控件,我正在调用一个ResponseTimer。这基本上由DispatcherTimer和ProgressBar组成。它具有名为TimeElapsed和TimeoutPeriod的属性,它们是TimeSpans。在我的程序的用户界面中,事件会定期发生。用户可以在一段时间内重新加入活动。如果时间间隔到期,程序将自行采取措施。
我想在两个地方使用这个控件。一个将出现在ListBox中,另一个出现在窗口底部。对于ListBox中的cope,当时间段到期时,我想隐藏ProgressBar,而我不想隐藏窗口底部的控件。
为了获得这个功能,我定义了两个名为HideIfExpired和IsExpired的bool DependcyProperties。如果HideIfExpired为true,则如果IsExpired为true,则隐藏ProgressBar。简单。
我想在默认内容模板中为Generic.xaml中的控件使用触发器。不过,我不知道如何编写触发器。
这是控件的XAML:
<Style TargetType="{x:Type local:ResponseTimer}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ResponseTimer}">
<StackPanel Visibility="{TemplateBinding Visibility}">
<ProgressBar Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
FlowDirection="{TemplateBinding FlowDirection}"
Foreground="{TemplateBinding Foreground}"
Height="{TemplateBinding Height}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
IsEnabled="{TemplateBinding IsEnabled}"
IsTabStop="False"
Margin="{TemplateBinding Margin}"
MaxHeight="{TemplateBinding MaxHeight}"
MaxWidth="{TemplateBinding MaxWidth}"
MinHeight="{TemplateBinding MinHeight}"
Minimum="0"
MinWidth="{TemplateBinding MinWidth}"
Name="PART_ProgressBar"
Opacity="{TemplateBinding Opacity}"
OpacityMask="{TemplateBinding OpacityMask}"
Orientation="{TemplateBinding Orientation}"
Padding="{TemplateBinding Padding}"
Panel.ZIndex="{TemplateBinding Panel.ZIndex}"
RenderSize="{TemplateBinding RenderSize}"
RenderTransform="{TemplateBinding RenderTransform}"
RenderTransformOrigin="{TemplateBinding RenderTransformOrigin}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Style="{TemplateBinding Style}"
Tag="{TemplateBinding Tag}"
ToolTip="{TemplateBinding ToolTip}"
UseLayoutRounding="{TemplateBinding UseLayoutRounding}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
Visibility="{Binding Path=IsExpired, Converter={StaticResource InvertedBoolToVisibility}, RelativeSource={RelativeSource TemplatedParent}}"
Width="{TemplateBinding Width}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我不确定为什么StackPanel在那里,它可能是以前版本的控件的残余。我可以用边框替换它,只是为了隐藏整个事物。
无论如何,我该如何编写触发器?
答案 0 :(得分:1)
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsExpired" Value="True" />
<Condition Property="HideIfExpired" Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Visibility" Value="Collapsed" />
</MultiTrigger.Setters>
</MultiTrigger>
</ControlTemplate.Triggers>