К вашему сведению, я довольно новичок в Silverlight.
Хорошо, я хочу создать простой пользовательский элемент управления, который содержит кнопку и дополнительный XAML, как указано клиентом элемента управления.
Я начал поиск в Google и нашел, по крайней мере, 30 разных статей, которые были очень запутанными; особенно потому, что они говорят о стилизации анимации, настройке других элементов управления, которые вам не принадлежат, и других дерьмах, к которым я еще не готов.
Это то, что я сделал.
- В VS 2010 я щелкнул правой кнопкой мыши и добавил новый UserControl под названием MyControl
- В MyControl.xaml я изменил LayoutRoot на StackPanel и добавил внутри него кнопку
- В свой MainPage.xaml я добавил экземпляр MyControl
- Я добавил TextBox в качестве дочернего элемента этого экземпляра
- Я попытался собрать и получил ошибку, что MyControl не поддерживает Direct Content
Погуглил еще немного ..
- Я изменил MyControl для наследования от ContentControl и обновил xaml
- Я добавил ContentPresenter в xaml, чтобы представить клиенту «пользовательский контент»
Хорошо, он собирается, и TextBox появляется, но кнопка отсутствует.
Вот соответствующий раздел из MainPage.xaml
<my:MyControl HorizontalAlignment="Left" Margin="49,26,0,0" x:Name="myContentControl1" VerticalAlignment="Top" Height="550" Width="389">
<TextBox Height="72" HorizontalAlignment="Left" Margin="166,339,0,0" Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="460" />
</my:MyControl>
Вот MyControl.xaml
<ContentControl x:Class="ContentControlTest.MyControl"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="480" d:DesignWidth="480">
<StackPanel x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" Orientation="Vertical">
<ContentPresenter/>
<Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="78,254,0,0" Name="FooFoo" VerticalAlignment="Bottom" Width="160" />
</StackPanel>
</ContentControl>
А вот и MyControl.cs
using System.Windows.Controls;
namespace ContentControlTest
{
public partial class MyControl : ContentControl
{
public MyControl()
{
InitializeComponent();
}
}
}
Мне показалось, что это работает так, что дочерние элементы экземпляра элемента управления устанавливаются как свойство Content в базовом классе ContentControl MyControl. Затем ContentPresenter «вставляет» этот контент в MyControl.xaml, где бы он ни появлялся.
Хотя похоже, что так оно и есть, в процессе «съедает» кнопку, которую я определил в MyControl.xaml.
Я пытаюсь не заходить в ControlTemplate и т. Д., Пока это не является абсолютно необходимым.
Может кто-нибудь с подсказкой подскажите, пожалуйста, что я делаю не так.
спасибо!