Я создаю пользовательский элемент управления WPF, который я вызываю ResponseTimer. Это в основном состоит из DispatcherTimer и ProgressBar. У этого есть свойства, названные TimeElapsed и TimeoutPeriod, которые являются TimeSpans. В пользовательском интерфейсе моей программы события происходят периодически. Существует период времени, в течение которого пользователь может повторно открыть событие. Если интервал истекает, программа выполняет действие самостоятельно.
Я хочу использовать этот элемент управления в двух местах. Один будет на элементе, который появляется в ListBox, другой внизу окна. Для копий в ListBox, когда период времени истек, я хочу скрыть ProgressBar, в то время как я не хочу скрывать элемент управления в нижней части окна.
Чтобы получить эту функциональность, я определил два bool DependcyProperties с именами HideIfExpired и IsExpired. Если HideIfExpired имеет значение true, то ProgressBar будет скрыт, если IsExpired имеет значение true. Простой.
Я хочу использовать триггеры в шаблоне содержимого по умолчанию для элемента управления в 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, это может быть остаток предыдущей версии элемента управления. Я мог бы заменить его на Границу, просто чтобы спрятать все это.
В любом случае, как мне написать мои триггеры?