2011-07-12 8 views
1

私はこのWPFのスタイルを持っている:wpfポップアップウィンドウでIsOpenプロパティをTrueに設定するにはどうすればいいですか?

<Style x:Key="RequiredControlTemplate"> 
    <Style.Setters> 
     <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
       <ControlTemplate> 
        <StackPanel> 
         <Popup IsOpen="{Binding ElementName=Adorner, Path=IsMouseOver}"> 
          <TextBlock Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" /> 
         </Popup> 
         <Border Grid.Column="1" BorderBrush="Red" BorderThickness="1" HorizontalAlignment="Stretch"> 
          <AdornedElementPlaceholder Name="Adorner"/> 
         </Border> 
        </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style.Setters> 
</Style> 

私はマウスがAdornerの上にあるならば、ポップアップが開いているが、IsOpen="{Binding ElementName=Adorner, Path=IsMouseOver}が動作しないことをしたい...

+0

にポップアップオープン...とトリガストーリーボードで再生するストーリーボードの 追加夫婦コンソール内の任意の結合エラーが出るのですか? – anivas

+0

yes: '...バインディングは読み込み専用のプロパティ 'IsMouseOver' ...では動作しません –

+0

私は正確にはわかりませんが、ポップアップの' Behavior'を指定して、それに何らかのメソッドを使うべきだと思いますポップアップが開かれます。 – stukselbax

答えて

1

あなたのスタイルはほとんど変更されていません。 adorner要素

<Style x:Key="RequiredControlTemplate"> 
      <Style.Setters> 
       <Setter Property="Validation.ErrorTemplate"> 
        <Setter.Value> 
         <ControlTemplate> 
          <StackPanel> 
           <StackPanel.Resources> 
            <Storyboard x:Key="OnMouseEnter1"> 
             <BooleanAimationUsingKeyFrames Storyboard.TargetProperty="(Popup.IsOpen)" Storyboard.TargetName="popup"> 
              <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/> 
             </BooleanAnimationUsingKeyFrames> 
            </Storyboard> 
            <Storyboard x:Key="OnMouseLeave1"> 
             <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(Popup.IsOpen)" Storyboard.TargetName="popup"> 
              <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/> 
              <DiscreteBooleanKeyFrame KeyTime="0:0:0.1" Value="False"/> 
             </BooleanAnimationUsingKeyFrames> 
            </Storyboard> 
           </StackPanel.Resources> 
           <Popup Name="popup"> 
            <TextBlock Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" /> 
           </Popup> 
           <Border Grid.Column="1" BorderBrush="Red" BorderThickness="1" HorizontalAlignment="Stretch"> 
            <AdornedElementPlaceholder Name="Adorner"> 
             <AdornedElementPlaceholder.Triggers> 
              <EventTrigger RoutedEvent="Mouse.MouseLeave" SourceName="Adorner"> 
               <BeginStoryboard x:Name="OnMouseLeave1_BeginStoryboard" Storyboard="{StaticResource OnMouseLeave1}"/> 
              </EventTrigger> 
              <EventTrigger RoutedEvent="Mouse.MouseEnter" SourceName="Adorner"> 
               <BeginStoryboard Storyboard="{StaticResource OnMouseEnter1}"/> 
              </EventTrigger> 
             </AdornedElementPlaceholder.Triggers> 
            </AdornedElementPlaceholder> 
           </Border> 
          </StackPanel> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style.Setters> 
     </Style> 
1

は、結合にMode=OneWayを追加します。 IsOpenはデフォルトでTwoWayであり、読み取り専用のプロパティではTwoWayバインディングが許可されていません。

0

MVVMパターンに従っていない場合は、xamlにx:codeと指定してMouseOverイベントを処理し、EventSetterを使用して接続できます。

関連する問題