这是我的问题,我创建了一个UserControl,如下所示:
XAML:
<UserControl x:Class="ProcessVisualizationBar.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" xmlns:lb="clr-namespace:ProcessVisualizationBar"
Name="ProcessVisualizationBar">
<Border BorderBrush="Silver" BorderThickness="1,1,1,1" Margin="0,5,5,5" CornerRadius="5" Padding="2">
<ListBox Name="ProcessVisualizationRibbon" Grid.Column="1" Height="40" ItemsSource="{Binding ElementName=ProcessVisualizationBar, Path=ItemsSource}"/>
</Border>
</UserControl>
背后的代码(C#):
using System.Windows;
using System.Windows.Controls;
namespace ProcessVisualizationBar
{
public partial class UserControl1 : UserControl
{
public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(System.Collections.IEnumerable), typeof(UserControl));
public System.Collections.IEnumerable ItemsSource
{
get { return ProcessVisualizationRibbon.ItemsSource; }
set { ProcessVisualizationRibbon.ItemsSource = value; }
}
public UserControl1()
{
InitializeComponent();
}
}
}
我构建了我的Usercontrol并将.dll添加到另一个项目的引用中。我在我的XAML顶部添加了引用:
xmlns:uc="clr-namespace:ProcessVisualizationBar;assembly=ProcessVisualizationBar"
然后我去使用控件。
<uc:UserControl1 Grid.Row="2" x:Name="ProcessVisualizationContent" />
它找到控件没关系,但是当我尝试找到我添加到它的ItemsSource属性时,我找不到它。我不确定我错过了什么,而且我不确定哪些调试工具可以用来解决这个问题。
任何人都有这方面的经验可以分享他们的智慧吗?
答案 0 :(得分:1)
传递的实际数据是什么?这就是你应该创造的东西,而不是你正在尝试的传递情境。
创建一个依赖项属性,目标是使用属性更改处理程序传递的实际数据。在change事件上,然后调用内部代码将其绑定到ProcessVisualazation ItemsSource。这样,您可以通过在事件中放置断点来调试数据。
这是一个消费者将在Xaml中看到StringData并需要将字符串列表传递到自定义控件中的示例:
#region public List<string> StringData
/// <summary>
/// This data is to be bound to the ribbon control
/// </summary>
public List<string> StringData
{
get { return GetValue( StringDataProperty ) as List<string>; }
set { SetValue( StringDataProperty, value ); }
}
/// <summary>
/// Identifies the StringData dependency property.
/// </summary>
public static readonly System.Windows.DependencyProperty StringDataProperty =
System.Windows.DependencyProperty.Register(
"StringData",
typeof( List<string> ),
typeof( UserControl ),
new System.Windows.PropertyMetadata( null, OnStringDataPropertyChanged ) );
/// <summary>
/// StringDataProperty property changed handler.
/// </summary>
/// <param name="d">DASTreeBinder that changed its StringData.</param>
/// <param name="e">Event arguments.</param>
private static void OnStringDataPropertyChanged( System.Windows.DependencyObject d, System.Windows.DependencyPropertyChangedEventArgs e )
{
UserControl source = d as UserControl;
List<string> value = e.NewValue as List<string>;
BindDataToRibbon( value );
}
#endregion public List<string> StringData
现在只需创建一个BindDataToRibbon方法,它将执行脏工作。请注意,我在Visual Studio中使用Jeff Wilcox's Silverlight dependency snippets来生成上述依赖项。我已将它用于WPF和Silverlight项目。