2012-01-28 26 views
0

私はWPFカスタムコントロールをビルドしています。私はResponseTimerを呼び出しています。これは基本的にDispatcherTimerとProgressBarで構成されています。 TimeSpanであるTimeElapsedおよびTimeoutPeriodというプロパティがあります。私のプログラムのユーザーインターフェイスでは、イベントは定期的に発生します。ユーザーがイベントに再開できる期間があります。インターバルが終了すると、プログラムはそれ自身でアクションを実行します。WPFカスタムコントロールのトリガーをビルドする方法

このコントロールは2か所で使いたいです。 1つはListBoxに表示されるアイテムになり、もう1つはウィンドウの下部に表示されます。リストボックス内のコーピングについては、期間が終了したときにProgressBarを非表示にしたいが、ウィンドウの下部にコントロールを隠したくはない。

この機能を使用するには、HideIfExpiredとIsExpiredという2つの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のは、そこにある任意のより多くの理由、それはコントロールの以前のバージョンの名残かもしれわかりません。私はそれを境界線に置き換えて、全体を隠す方法を持っているかもしれません。

とにかく、トリガーを書き込むにはどうすればよいですか?

答えて

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> 
+0

ありがとうございます!私はそれを朝に試して、それがどのように動作するか見てみましょう。 –

+0

トリガーはどうやって行ったのですか?それは動作しましたか? –

+0

動作しませんでした。両方ともDependencyPropertiesであり、うまくいくはずですが、そうではありませんでした。私はコードビハインドで何かを実装しました。とにかくありがとう。興味深いもの: –