UserControl пользовательская проблема DependencyProperties - PullRequest
1 голос
/ 26 марта 2009

У меня есть пользовательский элемент управления UserControl с изображением и меткой, которые установлены во время разработки в XAML следующим образом: <controls:HomeBarButton Icon="/SuCo;component/Resources/music.png" Text="music"/>

Когда элемент управления имеет только значок, он выглядит хорошо. Когда я добавляю свойство Text, значок исчезает как во время разработки, так и во время выполнения, а текстовая метка игнорирует форматирование, установленное в UserControl, и становится просто черной в левом верхнем углу элемента управления, когда метка центрирована.

Соответствующий UserControl XAML:

    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
    <Image x:Name="icon" Width="102" Height="102" VerticalAlignment="Stretch"  Source="{Binding Icon}"/>
    <Label x:Name="label" HorizontalContentAlignment="Center" VerticalAlignment="Bottom" Foreground="White" FontFamily="Calibri" FontSize="24" Padding="0" Content="{Binding Text}"></Label>
</StackPanel>

Код-за:

        public ImageSource Icon
    {
        get { return (ImageSource)this.GetValue(IconProperty); }
        set { this.SetValue(IconProperty, value); }
    }

    public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(ImageSource), typeof(HomeBarButton), new FrameworkPropertyMetadata(OnIconChanged));

    private static void OnIconChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
    {
        dependencyObject.SetValue(Image.SourceProperty, e.NewValue);
    }

    public string Text
    {
        get { return (string)this.GetValue(TextProperty); }
        set { this.SetValue(TextProperty, value); }
    }

    public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(HomeBarButton), new FrameworkPropertyMetadata(OnTextChanged));

    private static void OnTextChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
    {
        dependencyObject.SetValue(Label.ContentProperty, e.NewValue);
    }

Что я делаю не так? (

1 Ответ

0 голосов
/ 26 марта 2009

Во-первых, я бы изменил эту метку на TextBlock - вы бы использовали метку, чтобы связать текст метки с другим элементом управления. Судя по вашему коду, вы этого не делаете и хотите только отобразить текст. Еще одна вещь, чтобы проверить, если ваш текст отображается поверх значка. Я предполагаю, что это то, что происходит. Переход на TextBlock может исправить это, в противном случае вам, вероятно, следует установить высоту и с помощью TextBlock вручную. Просто моя .02 стоит.

...