Binding boolean DependencyProperty to a button's Visibility property in Generic.xaml
I have a class called CarSystemWindow that descends from Window, and it has a CanPinWindow boolean dependency property:
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 ); }
}
. . .
}
In Generic.xaml, I have defined the default style for the CarSystemWindow class:
<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>
The binding for the PART_PushpinButton Button's Visibiility property isn't working. The button is always visible, even though the property defaults to false. What am I doing wrong?
Tony
I think the RelativeSource
should be TemplatedParent
, not Self
. Or am I missing some part of your code?
<Button Grid.Column="1"
Margin="5"
Name="PART_PushpinButton"
Visibility="{Binding CanPinWindow, Converter= {StaticResource BoolToVisbility}, RelativeSource={RelativeSource TemplatedParent}}">
精彩评论