我的UserControl上有一个RadBusyIndicator,如下所示:
<Grid>
<!-- Other Content -->
<t:RadBusyIndicator IsBusy="{Binding IsBusy}"></t:RadBusyIndicator>
</Grid>
每当我点击设计视图时,它就会转到BusyIndicator。
我可以将Panel.ZIndex设置为负数以选择“其他内容”,但这会导致RadBusyIndicator落后于“其他内容”
我尝试使用ZIndex的绑定,如下所示:
<t:RadBusyIndicator Panel.ZIndex="{Binding BusyZIndex}" IsBusy="{Binding IsBusy}"></t:RadBusyIndicator>
但它没有帮助。
所以问题是:
如何将RadBusyIndicator放在所有“其他内容”的“顶部”上,但仍然可以单击(在设计器中)并转到该控件的xaml行?
答案 0 :(得分:1)
BusyIndicator需要在“顶部”位于控件前面。这使它在设计师中也处于领先地位。
可能有更好的方法来解决这个问题,但我想到的是将BusyPanel作为UserControl上的资源,然后将其添加到网格控件OnApplyTemplate或由代码加载。
这是UserControl的XAML。
<UserControl x:Class="WpfApplication2.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"
xmlns:t="REFERENCE.TO.THE.RAD.ASSEMBLY"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<t:RadBusyIndicator x:Key="TheBusyIndicator" IsBusy="{Binding IsBusy}">
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Button Content="Some content to the button"
Height="25"
Width="200"/>
</Grid>
</UserControl>
我已将BusyIndicator添加为具有密钥“TheBusyIndicator”的资源。 我还在网格中添加了x:Name =“LayoutRoot”,它将包含BusyIndicator。 如果Grid实际上不是布局根控件,那么Grid当然可以有另一个名称。
最后将BusyIndicator添加到Children集合中,它将显示在标记代码添加的所有其他控件的前面。
以下是代码
UserControl的构造函数:
public UserControl1()
{
this.Loaded += new RoutedEventHandler(UserControl1_Loaded);
}
反复代码:
private void UserControl1_Loaded(object sender, RoutedEventArgs e)
{
this.LayoutRoot.Children.Add(this.Resources["TheBusyIndicator"] as RadBusyIndicator);
}
我再也不会使用UserControls了,只有在XAML转到“Generic.xaml”的CustomControls中,我没有编辑工作。所以我暂时没有看到这个问题。