Я только начинаю с Expression Blend и пытаюсь создать пользовательский UserControl, который предоставляет свойство боковому меню Properties элемента управления, которое обновляет различные аспекты представления.Например, я хочу выставить свойство с именем «Текст» в боковом меню «Свойства» в Blend, которое привязывается к TextBlock внутри UserControl.
Вот XAML UserControl:
<UserControl
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"
x:Class="XDAFacebook.XFItemGrid"
d:DesignWidth="148" d:DesignHeight="200">
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid>
<Grid Height="148" Margin="0" VerticalAlignment="Top">
<Image Height="148" Margin="0" Source="feeds.png" Stretch="Fill" VerticalAlignment="Bottom">
<Image.Clip>
<RectangleGeometry RadiusX="10" RadiusY="10" Rect="0,0,148,148" />
</Image.Clip>
</Image>
<Rectangle Fill="#00EBEBEC" Margin="0,0,0,0" Stroke="#FFB5B5B5" StrokeThickness="2" RadiusX="10" RadiusY="10"/>
</Grid>
<TextBlock x:Name="MainText" Height="33" Margin="8,0,11,13" TextWrapping="Wrap" Text="{Binding Text}" VerticalAlignment="Bottom" Foreground="#FF606060" HorizontalAlignment="Center" FontWeight="Bold" FontSize="24"/>
</Grid>
</Grid>
</UserControl>
А вотэто код для этого элемента управления:
[Description("Items for Main Grid")]
public partial class XFItemGrid : UserControl
{
public XFItemGrid()
{
// Required to initialize variables
InitializeComponent();
}
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text",
typeof(string),
typeof(XFItemGrid),
new PropertyMetadata(OnTextChanged));
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((XFItemGrid)d).Text = (String)e.NewValue;
}
[Description("Main Text to be displayed in the control")]
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
}
Я вижу свойство «Текст» в разделе «Разное» бокового меню «Свойства», но когда я обновляю его, в TextBlock ничего не меняется.
В конце концов я хотел бы сделать то же самое с источником изображения, но если это будет другой пост, дайте мне знать, и я добавлю его в другой.
РЕДАКТИРОВАТЬ -
Данг, я нашел ошибку ..... Я серьезно думал, что схожу с ума!Но оказывается, что я никогда не устанавливал свойство правильно.
Вот код, который нужно изменить:
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((XFItemGrid)d).Text = (String)e.NewValue;
}
на:
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((XFItemGrid)d).MainText = (String)e.NewValue;
}
Бла,Я надеюсь, что поможет!Убедитесь, что вы на самом деле измените свойство!