Mohit Vashistha
Mohit Vashistha

Reputation: 1904

Pin Toggle button style

Hi i want to create a generic style for pin button.

<Window x:Class="TooglePinButtonStyle.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
  <Window.Resources>
    <Image x:Key="pinImage"
           Width="14"
           Height="14"
           Source="/TooglePinButtonStyle;component/Images/pin.png" />
    <Image x:Key="unPinImage"
           Width="14"
           Height="14"
           Source="/TooglePinButtonStyle;component/Images/unpin.png" />

    <Style x:Key="pinButtonStyle"
           TargetType="{x:Type ToggleButton}">
      <Setter Property="Content" Value="{DynamicResource unPinImage}" />
      <Style.Triggers>
        <Trigger Property="IsChecked" Value="True">
          <Setter Property="Content" Value="{DynamicResource pinImage}" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </Window.Resources>
  <StackPanel>
    <ToggleButton Height="30" 
                  Width="30"
                  Style="{StaticResource pinButtonStyle}"/>
    <ToggleButton Height="30" 
                  Width="30" 
                  Style="{StaticResource pinButtonStyle}"/>
  </StackPanel>
</Window>

It works fine when there is only one button but when I have two button the UI crashes with

"Specified element is already the logical child of another element. Disconnect it first."

exception.

Upvotes: 0

Views: 1587

Answers (1)

brunnerh
brunnerh

Reputation: 184554

Either make the images non-shared, or set the ContentTemplate to some DataTemplate which contains an image (not a reference to an image), rather than the Content. If you have only one instance of an UI-element you will run into this problem, templates describe what should be created rathen than using instances directly.

Upvotes: 1

Related Questions