проблема создания зависимости в пользовательском контроле - PullRequest
0 голосов
/ 12 декабря 2011

Я пытаюсь создать свойство зависимости IsChecked для моего пользовательского элемента управления ToggleImageButton. Я просто хочу иметь возможность установить и получить свойство IsChecked в ToggleButton. Кажется, что свойство зависимости не отражает фактическое значение свойства IsChecked объекта ToggleButton. Пожалуйста, помогите.

Вот мой код файла:

public partial class ToggleImageButton : UserControl
{
    public ToggleImageButton()
    {
        InitializeComponent();
    }

    public ImageSource Image
    {
        get { return (ImageSource)GetValue(ImageProperty); }
        set { SetValue(ImageProperty, value); }
    }

    public static readonly DependencyProperty ImageProperty =
        DependencyProperty.Register("Image", typeof(ImageSource), typeof(ToggleImageButton), new UIPropertyMetadata(null));


    public Boolean IsChecked
    {
        get { return (Boolean)GetValue(IsCheckedProperty); }
        set { SetValue(IsCheckedProperty, value); }
    }
}

А вот файл xaml:

<UserControl x:Class="MyControls.ToggleImageButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Name="UC">
<Grid Margin="0,0,0,0">
    <ToggleButton Margin="0,0,0,0" IsChecked="{Binding RelativeSource={RelativeSource Self}, Path=Source.IsChecked, Mode=TwoWay}">
        <StackPanel Orientation="Horizontal" Margin="0,0,0,0">
            <Image Source="{Binding ElementName=UC, Path=Image}"
                   Stretch="Fill"
                   Width="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelWidth}"
                   Height="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelHeight}"
                   Margin="0,0,0,0"/>
        </StackPanel>
    </ToggleButton>
</Grid>

1 Ответ

0 голосов
/ 09 августа 2012

Хорошо, я только что нашел решение.Для привязки IsChecked в файле xaml я по ошибке использовал RelativeSource, который я скопировал и вставил из свойств высоты и ширины.Я только что исправил привязку isChecked, так что это IsChecked = "{Binding ElementName = UC, Path = IsChecked}, и это сработало -

...