我有一个问题,如何按行移动WPF应用程序中的对象?我的Xaml看起来像这样:
<Grid>
<Grid.ColumnDefinitions>
<Some columns here!/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<Some Rows here!/>
</Grid.RowDefinitions>
<Button x:Name="Button1"
Grid.Row="1" Grid.Column="4"
Width="50" Height="50"
Content="Button1"
Foreground="White"
BorderThickness="0"
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
BorderBrush="{x:Null}"
Background="#FF085078"/>
<Button x:Name="Button2"
Grid.Row="2" Grid.Column="4"
Content="Button2"
Foreground="White"
BorderThickness="0"
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
BorderBrush="{x:Null}"
Background="#FF085078"/>
<ContentControl Grid.Row="1" Grid.Column="2" Grid.RowSpan="2" Grid.ColumnSpan="3"
x:Name="ActiveItem"/>
我想做的是,当我在内容控件中显示另一个窗口时,我想从内容控件的第二个视图下移动“ Button2”。如何在当前控制下移动项目,当我关闭第二个视图时,项目又回到了主要位置?如何将Grid.Row绑定为我想要做的事情?如果有帮助,请使用Caliburn.Micro Framework>
感谢您的建议!
答案 0 :(得分:0)
首先将每个Grid.Row
绑定到可绑定的属性。
<Grid>
<Grid.ColumnDefinitions>
<Some columns here!/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<Some Rows here!/>
</Grid.RowDefinitions>
<Button x:Name="Button1"
Grid.Row="{Binding Button1Row}" Grid.Column="4"
Width="50" Height="50"
Content="Button1" />
<Button x:Name="Button2"
Grid.Row="{Binding Button2Row}" Grid.Column="4"
Width="50" Height="50"
Content="Button2"/>
<ContentControl Grid.Row="{Binding ContentControlRow}" Grid.Column="2" Grid.RowSpan="2" Grid.ColumnSpan="3"
x:Name="ActiveItem"/>
</Grid>
现在,在与DataContext绑定的对象中,您需要定义这些可绑定属性。
请注意,在MVVM中,行号可以被视为 view ,而不是 ViewModel 。因此,首先您需要确定要走的路。
您可以在 ViewModel 中添加这些可绑定属性,并通过命令对其进行修改。
您可以将它们直接添加到 view 的代码隐藏(MyWindow.xaml.cs或MyUserControl.xaml.cs)中,并通过事件处理程序修改它们。
在第二种情况下:
您可能会忘记绑定,而只是按照Clemens的建议使用Grid.SetRow(Button2, 3);
。
或者您可以对这些修改使用绑定:
x:Name
设置为,例如MyUserControlRoot
。 ElementName
添加到绑定中。 例如Grid.Row="{Binding ElementName=MyUserControlRoot, Path=Button1Row}"
答案 1 :(得分:0)
您可以声明一个按钮样式,该按钮样式根据ContentControl的Grid.Row
是否为null来设置Content
属性值:
<Button Content="Button2" Grid.Column="4">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Grid.Row" Value="3"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Content, ElementName=ActiveItem}"
Value="{x:Null}">
<Setter Property="Grid.Row" Value="2"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
如果已经分配了一个样式
<Button Style="{StaticResource X}" .../>
删除它并写下:
<Button ...>
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource X}">
...
</Style>
</Button.Style>
</Button>