2011-11-02 65 views
2
<Style x:Key="FavouriteMenuItemStyle" TargetType="{x:Type MenuItem}" BasedOn="{StaticResource BasicFavouriteItemStyle}"> 
    <Setter Property="Width" Value="Auto"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type MenuItem}"> 
       <Grid> 
        <ToggleButton x:Name="Bd" 
            Content="{Binding Header}" 
            Style="{StaticResource FolderButtonStyle}" 
            Height="{TemplateBinding Height}" 
            Width="{TemplateBinding Width}" 
            Margin="{TemplateBinding Margin}" 
            Padding="{TemplateBinding Padding}" 
            Focusable="False"/> 

        <Popup x:Name="PopupMenu" 
          IsOpen="False" 
          Placement="Bottom" 
          PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}" 
          AllowsTransparency="True" 
          Focusable="False" 
          StaysOpen="False"> 

         <Border BorderBrush="{StaticResource MpButtonNormalStrokeBrush}" 
           Background="{StaticResource MpButtonNormalFillBrush}" 
           BorderThickness="1" 
           CornerRadius="3" 
           Padding="4"> 
          <ItemsControl ItemsSource="{Binding Favourites}" ItemTemplate="{StaticResource FavouriteMenuItemDataTemplate}"/> 
         </Border> 
        </Popup> 
       </Grid> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsChecked" SourceName="Bd" Value="True"> 
         <Setter Property="IsOpen" TargetName="PopupMenu" Value="True"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

我定义了以下样式。我想将Popup的IsOpen属性绑定到ToggleButton的IsChecked属性。模板中控件之间的绑定

我正试图使用​​FindAncestor来查找网格并从那里开始工作,但是我无法把它弄清楚。有没有办法绑定这两个对象?如果是这样如何?

回答

3

这应该工作:

IsOpen="{Binding ElementName=Bd, Path=IsChecked}" 
+1

而且它。我忘了那个语法。顺便说一句,你只是修复了我在弹出窗口中遇到的另一个错误。谢谢! – Nathanael

+0

@Nathanael:有时使用Popup对设置PlacementTarget非常有用,只是为了提醒一下这个不错的功能 – sll