2011-10-03 90 views
2
按鈕的Visibility屬性

我有一個類叫做CarSystemWindow從窗口下降,而且它有一個CanPinWindow布爾依賴項屬性:綁定布爾的DependencyProperty在Generic.xaml

public class CarSystemWindow : Window { 

    public static readonly DependencyProperty CanPinWindowProperty = 
     DependencyProperty.Register("CanPinWindow", typeof(bool), typeof(CarSystemWindow), 
       new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsArrange)); 

    public bool CanPinWindow { 
     get { return (bool) GetValue(CanPinWindowProperty); } 
     set { SetValue(CanPinWindowProperty, value); } 
    } 

    . . . 
} 

在Generic.xaml,我已經定義CarSystemWindow類的默認樣式:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:CarSystem.CustomControls" 
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" 
        xmlns:Telerik_Windows_Controls_Chromes="clr-namespace:Telerik.Windows.Controls.Chromes;assembly=Telerik.Windows.Controls"> 

    <BooleanToVisibilityConverter x:Key="BoolToVisbility" /> 

    <Style TargetType="{x:Type local:CarSystemWindow}"> 
     <Setter Property="WindowState" Value="Maximized" /> 
     <Setter Property="WindowStyle" Value="None" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:CarSystemWindow}"> 
        <Viewbox Name="LayoutRoot" Stretch="Uniform"> 
         <StackPanel> 
          <Grid Background="#FF3C4B66" Height="50" Name="PART_Title"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*" /> 
            <ColumnDefinition Width="50" /> 
            <ColumnDefinition Width="50" /> 
            <ColumnDefinition Width="50" /> 
           </Grid.ColumnDefinitions> 
           <Label Content="{TemplateBinding Title}" 
             FontSize="32" 
             Foreground="White" 
             Grid.Column="0" 
             HorizontalAlignment="Left" 
             Name="PART_TitleLabel" /> 
           <Button Grid.Column="1" 
             Margin="5" 
             Name="PART_PushpinButton" 
             Visibility="{Binding CanPinWindow, Converter={StaticResource BoolToVisbility}, RelativeSource={RelativeSource Self}}"> 
            <Image Name="PART_PushpinImage" Source="/CarSystem;component/Resources/Unpinned.png" /> 
           </Button> 
           <Button Grid.Column="2" 
             Margin="5" 
             Name="PART_MinimizeButton"> 
            <Image Name="PART_MinimizeButtonImage" Source="/CarSystem;component/Resources/Minimize.png" /> 
           </Button> 
           <Button Grid.Column="3" 
             Margin="5" 
             Name="PART_CloseButton"> 
            <Image Name="PART_CloseButtonImage" Source="/CarSystem;component/Resources/Close.png" /> 
           </Button> 
          </Grid> 

          <Rectangle Fill="#FFE61E0F" Height="4" Name="PART_TitleBar" /> 

          <Grid Background="#FF3C4B66" Height="25" Name="PART_SubTitle"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="*" /> 
           </Grid.ColumnDefinitions> 
           <Label Content="{TemplateBinding DeviceType}" 
             FontSize="22" 
             Foreground="White" 
             Grid.Column="0" 
             HorizontalContentAlignment="Right" 
             Margin="5" 
             MinWidth="75" 
             Name="PART_DeviceTypeLabel" /> 
           <Label Content="{TemplateBinding DeviceName}" 
             FontSize="22" 
             Foreground="White" 
             Grid.Column="1" 
             HorizontalContentAlignment="Left" 
             Margin="5" 
             MinWidth="250" 
             Name="PART_DeviceNameLabel" /> 
           <Rectangle Fill="White" Grid.Column="2" Name="PART_SubTitleRight" /> 
          </Grid> 

          <Rectangle Fill="#FF3C4B66" Height="4" Name="PART_TitleBottom" /> 

          <ContentPresenter Name="PART_ClientArea" /> 

         </StackPanel> 
        </Viewbox> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    . . . 

</ResourceDictionary> 

PART_PushpinButton按鈕的Visibiility屬性的綁定不起作用。該按鈕始終可見,即使屬性默認爲false。我究竟做錯了什麼?

託尼

回答

2

我覺得RelativeSource應該是TemplatedParent,不Self。或者我錯過了代碼的一部分?

<Button Grid.Column="1" 
    Margin="5" 
    Name="PART_PushpinButton" 
    Visibility="{Binding CanPinWindow, Converter= {StaticResource BoolToVisbility}, RelativeSource={RelativeSource TemplatedParent}}"> 
+0

謝謝!這解決了它! –