问题:我有一个新制作的UserControl,在父网格中有几个telerik控件,可以在整个解决方案中使用它。听起来很简单吧?我创建了UserControl,让我们调用Class My.Project.Controls.Tool,然后我尝试使用命名空间xmlns:Controls="clr-namespace:My.Project.Controls;assembly=My.Project.GlobalUserControlDump"
调用另一个View,然后通过从方便的dandy intellisense中轻松选择在视图中设置它。
这正如预期的那样,我的UserControl出现在设计器的单独视图中就好了。所以我采取下一个正常的步骤并构建它......一旦构建完成(它没有按预期报告没有错误就好了)这个小虫子消失了! xaml当然仍然在视图中,但是它已经从设计器中消失了并且它没有出现在构建的解决方案上?
困惑我回去,快速更改UserControl,然后它出现在设计器中。好吧,我认为它必定是一些侥幸所以我再次构建它......它再次从设计师和构建的解决方案中消失了?
现在我可以继续可靠地重现这种情况。对UserControl进行一些更改,它会重新出现在设计器中.....然后构建它并再次消失!
有人可以对这个quandry有所了解吗?使用Caliburn Micro在SL中运行(在浏览器内外,但内置在浏览器中)。任何对这个谜团的见解当然都非常感激,希望另一双眼睛能够抓住我的愚蠢。干杯!
对于澄清,这就是用户控件中与a previous question直接相关的内容。
<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"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
mc:Ignorable="d"
x:Class="My.Project.Controls.DatePicker">
<Grid Width="90">
<telerik:RadDateTimePicker
InputMode="DatePicker"
SelectedDate="{Binding SelectedDate, Mode=TwoWay}"/>
<telerik:RadMaskedDateTimeInput
IsClearButtonVisible="False"
FormatString="{}{0:M/d/yy}"
SelectionOnFocus="SelectAll"
Value="{Binding SelectedDate, Mode=TwoWay}"/>
</Grid>
</UserControl>
然后我会直接在一个视图上调用(它将作为命名空间显示在GlobalUserControlDump项目中)并且一旦将命名空间添加到View中,它就会在intellisense中按预期显示正常;
<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"
xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
x:Class="My.Project.Views.RandomView"
xmlns:Controls="clr-namespace:My.Project.Controls;assembly=My.Project.GlobalUserControlDump"
mc:Ignorable="d">
<Grid>
<Controls:DatePicker />
</Grid>
</UserControl>
然后我暴露了我需要的财产;
namespace My
{
public partial class DatePicker : UserControl
{
public static readonly DependencyProperty SelectedDateProperty =
DependencyProperty.Register("SelectedDate", typeof(DateTime), typeof(DatePicker), new PropertyMetadata(null));
public DatePicker()
{
// Required to initialize variables
DataContext = this;
}
public DateTime SelectedDate
{
get { return (DateTime)GetValue(SelectedDateProperty); }
set { SetValue(SelectedDateProperty, value); }
}
}
}
感谢您一看,我目前仍然难过。
答案 0 :(得分:4)
您在UserControl的构造函数中缺少对InitializeComponent()的调用。
答案 1 :(得分:1)
我相信您发布的代码中的命名空间不正确。
通过更改new PropertyMetadata(null));
属性,不会注册回调。没有它,我相信绑定将不起作用。您要做的是绑定到usercontrol上的属性,当绑定值更改时,您需要在控件中包含的RadDateTimePicker
上设置值。
XAML:
<Grid Width="90">
<telerik:RadDateTimePicker x:Name="MyRadDateTimePicker" InputMode="DatePicker" />
<telerik:RadMaskedDateTimeInput x:Name="MyRadMaskedDateTimeInput"
IsClearButtonVisible="False"
FormatString="{}{0:M/d/yy}"
SelectionOnFocus="SelectAll" />
</Grid>
</UserControl>
代码背后的代码:
using System;
using System.Windows;
namespace SO
{
public partial class MyDatePicker
{
public MyDatePicker()
{
InitializeComponent();
}
public const string SelectedDatePropertyName = "SelectedDate";
public DateTime SelectedDate
{
get { return (DateTime)GetValue(SelectedDateProperty); }
set { SetValue(SelectedDateProperty, value); }
}
public static readonly DependencyProperty SelectedDateProperty = DependencyProperty.Register(
SelectedDatePropertyName,
typeof(DateTime),
typeof(MyDatePicker),
new PropertyMetadata(DateTime.Now, OnSelectedDatePropertyChanged));
private static void OnSelectedDatePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((MyDatePicker)d).MyRadDateTimePicker.SelectedDate = (DateTime) e.NewValue;
((MyDatePicker)d).MyRadMaskedDateTimeInput.Value = (DateTime)e.NewValue;
}
}
}