在我的MainPage.xaml上,我有一些自定义UserControls,我希望能够在整个Grid表面上移动。这就是我将它们全部添加到TransformGroup的原因:
this.transformGroup = new TransformGroup();
this.translation = new TranslateTransform();
this.scale = new ScaleTransform();
this.transformGroup.Children.Add(this.scale);
this.transformGroup.Children.Add(this.translation);
myCustomControl1.RenderTransform = this.transformGroup;
myCustomControl2.RenderTransform = this.transformGroup;
现在,我可以移动所有自定义控件,这些控件在网格上提供了“滚动效果”(类似于滚动Bing地图效果)。
我的问题是: 我希望能够从TransformGroup中分离我的自定义控件,并将其独立于其他控件。在myCustomControl.xaml.cs中,我有:
private void separateControlFromTransformGroup()
{
Grid parentGrid = (Grid)Parent;
this.transformGroup = (TransformGroup)this.RenderTransform;//backup copy of old transform group
newTransformGroup1 = new TransformGroup(); //new temporary transform group
TranslateTransform translation1 = new TranslateTransform();
CopyTranslateTransform((TranslateTransform)transformGroup.Children[1], translation1);//copy the values of transformGroup from the MainPage.xaml to temporary one (not reference)
ScaleTransform scale1 = new ScaleTransform();
CopyScale((ScaleTransform)transformGroup.Children[0], scale1);
newTransformGroup1.Children.Add(scale1);
newTransformGroup1.Children.Add(translation1);
foreach (myCustomControl brother in parentGrid.Children)
{
if (brother == this)
{
continue; (separate this control from the TransformGroup)
}
else
{
brother.RenderTransform = newTransformGroup1; //the rest of myCustromControls on the Grid in MainPage.xaml now have diffrent transform group. Now I can move selected control independent from the rest
}
}
}
移动单独的myCustomControl(使用新值)后,我无法将其与transformGroup中的其余部分连接,并且能够将所有内容一起移动。我该怎么办?如果没有选择,还有其他方法可以在网格上设置控件'moveAble',或者如果选择了任何一个,只选择一个?
请帮忙。
答案 0 :(得分:0)
您应该为每个用户控件创建一个单独的TransformGroupd。您可能会考虑使用容器控件将所有用户控件添加到其自己的TransformGroup中,此转换组将影响所有控件,而每个控件转换组用于影响各个控件。
您也可以考虑直接在XAML中将这些连接在一起。
因此,MainPage可能具有带子Grid的布局Grid,它充当所有控件的容器,这将被翻译和缩放以影响所有子控件。
<UserControl x:Class="SilverlightApplication1.MainPage"
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"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<Grid x:Name="Container">
<Grid.RenderTransform>
<TransformGroup>
<TranslateTransform x:Name="ContainerTranslation" />
<ScaleTransform x:Name="ContainerScale" />
</TransformGroup>
</Grid.RenderTransform>
</Grid>
</Grid>
</UserControl>
然后可以将子控件添加到Constainer
,每个控件都有自己的Translation和Scale转换。儿童控制可能是这样的。
<UserControl x:Class="SilverlightApplication1.EntityControl"
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"
d:DesignHeight="50" d:DesignWidth="50"
Width="50" Height="50">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RenderTransform>
<TransformGroup>
<TranslateTransform x:Name="Translation" />
<ScaleTransform x:Name="Scale" />
</TransformGroup>
</Grid.RenderTransform>
<Ellipse Stroke="Black" StrokeThickness="2" />
</Grid>
</UserControl>
后面的代码可以暴露一些您可以访问的属性,以影响实体控件的翻译和缩放。