我有一个DialogPrompt UserControl,它将包含一个Image和一个TextBlock。这是模板:
class func executeRequest<T: WebServiceProtocol>(delegate: T,url:String,postParameters:[String:String],headerParameters:[String:String]) {
}
如何在UserControl中公开TextBlock的Image和Text属性的Source属性?
答案 0 :(得分:9)
我会创建两个DependencyProperties
,一个用于Text
,另一个用于Image
Source
。
Image
Source
DependencyProperty
会在更新时自动设置内部Image
控件的来源。同样,Text
DependencyProperty
也会设置内部Text
控件的TextBlock
。
以下是设置:
public partial class MyUserControl : UserControl
{
#region ImageSource
public static readonly DependencyProperty ImageSourceProperty =
DependencyProperty.Register
(
"ImageSource",
typeof(Uri),
typeof(MyUserControl),
new FrameworkPropertyMetadata(new PropertyChangedCallback(OnImageSourceChanged))
);
public Uri ImageSource
{
get { return (Uri)GetValue(ImageSourceProperty); }
set { SetValue(ImageSourceProperty, value); }
}
#endregion ImageSource
#region Text
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register
(
"Text",
typeof(string),
typeof(MyUserControl),
new FrameworkPropertyMetadata("")
);
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
#endregion Text
public MyUserControl()
{
InitializeComponent();
}
private static void OnImageSourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var myUserControl = sender as MyUserControl;
if (myUserControl != null)
{
myUserControl.ImageSource.Source = new BitmapImage((Uri) e.NewValue);
}
}
}
每当Image
Source
发生更改时,都会自动更新内部Image
控件的来源。请注意,我们需要在此进行一些转换,因为Image
控件本身使用ImageSource
类型。
然后可以将XAML更新为:
<UserControl x:Name="ControlName">
<Button x:Name = "OkButton" Content="OK"/>
<DockPanel >
<Image x:Name = "MyImage" />
<TextBlock x:Name = "DialogTextBox" Text="{Binding ElementName=ControlName, Path=Text}"/>
</DockPanel>
</UserControl>
此处,内部TextBlock
控件只会绑定到父级Text
DependencyProperty
(主UserControl
)。
答案 1 :(得分:4)
在你的代码中,添加2个DependencyProperties并将它们绑定到Image Source和TextBlock Text。
以下是有关如何使用和创建依赖项属性的教程: http://www.wpftutorial.net/dependencyproperties.html
对于你在xaml中的绑定,这是一个例子:
<Image Source="{Binding YourProperty, RelativeSource={RelativeSource FindAncestor, AncestorType=YourUserControl}}/>