#silverlight #user-controls #background #properties
#silverlight #пользовательские элементы управления #фон #свойства
Вопрос:
Я создал a BarMenuItem
UserControl
в библиотеке классов Silverlight и пытаюсь использовать в своем основном приложении Silverlight.
BarMenuItem.xaml:
<UserControl x:Class="ButtonControlLibrary.BarMenuItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
</UserControl>
BarMenuItem.xmal.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace ButtonControlLibrary
{
public partial class BarMenuItem : UserControl
{
public BarMenuItem()
{
InitializeComponent();
}
}
}
Итак, на главной странице я xmlns:blib="clr-namespace:ButtonControlLibrary;assembly=ButtonControlLibrary"
определил
Пытался использовать BarMenuItem
:
<blib:BarMenuItem Width="100" Height="150" Background="Red"/>
Скомпилируйте и запустите его, и я ожидал увидеть красный фон, но я ничего не вижу.
Что случилось?
Я так запутался. Я много искал в Google, обнаружив, что есть обходной путь, но очень некрасивый: поместите Grid
контейнер внутрь UserControl
, а затем свяжите его Background
свойство с UserControl
Background
:
Background="{Binding Background, ElementName=guiUserControl}"
Но это не решение. Пожалуйста, посоветуйте.
В Adobe Flex так естественно изменять фон UserControl, как я делаю в приведенном выше коде.
Я что-то пропустил?
Спасибо.
Комментарии:
1. Как правило, UserControls не так хороши для создания таких компонентов, как «MenuItems», они лучше подходят для создания больших композитов, специфичных для конкретного приложения. Рассмотрите возможность использования вместо этого шаблонного элемента управления, это немного больше работы, но создает нечто гораздо более похожее на типичный компонент SDK / Toolkit.
Ответ №1:
Свойство есть, но, похоже, оно не работает в Silverlight. Ваш следующий лучший выбор — это решение, которое, как вы сказали, вы уже знаете. Привязка фона layoutroot к фону usercontrol.
Комментарии:
1. Это ошибка Silverlight? Я просто не могу в это поверить. Свойство есть, и мы НЕ МОЖЕМ его использовать. Что за хак ?!
2. Да, назовите это ошибкой. Я не уверен, сделали ли они это намеренно.
3. Ошибка не может быть такой забавной. Это настолько очевидно, что разработчик будет использовать его так часто. Хммм, Microsoft делает что-то забавное.
4. @Peter: это не ошибка. Реальность такова, что на самом деле у a
Control
вообще нет пользовательского интерфейса, поэтому среда выполнения Silverlight ничего не может сделать со свойством Background . В случае шаблонных элементов управления это зависит отControlTemplate
привязкиBackground
свойства к соответствующему элементу. В случаеUserControl
отсутствия шаблона, производный класс должен сделать что-то подходящее с самим свойством background в сочетании со своим собственным Xaml.5. @AnthonyWJones Отсутствие шаблона является ошибкой. В WPF это работает так, как должно. Я не понимаю, почему UserControl Silverlight не может иметь его?