我的问题是我有类库,其中定义了一些用户控件。我有几个使用这个库的项目。在其中一个项目中,我需要更改控件的布局。是否可以在Application项目中重新定义Xaml文件以更改用户控件的布局?
答案 0 :(得分:1)
我可以建议您使用错误的解决方案来解决此问题吗?首先,我承认你想要的是技术上可行的。实际上,如果需要,您可以在运行时生成XAML,并使其无限动态。但是当解决方案如此简单时,这就太复杂了。
视觉状态
使用visual state
可以定义控件或控件组的布局。然后,它让你定义一个控件或一组控件的另一个布局。然后,再一次。当您的控件看起来应该是Landscape
的一种方式时,您可以更改state
。当您的控件看起来应该是Portrait
的一种方式时,您可以更改state
。并且,当您的控件对于正在使用它的某个应用程序看起来完全不同时,您只需切换state
即可。
此解决方案为您提供通过XAML工具提供的完整设计时支持。它也与XAML的使用方式一致。而且,这是最简单的。我认为至少是这样。
阅读本文:http://blog.jerrynixon.com/2013/11/windows-81-how-to-use-visual-states-in.html
答案 1 :(得分:0)
您只需要在其Xaml文件中将UserControl的根元素(布局)的宽度和高度设置为自动,然后,您可以根据需要从应用程序项目中编辑其高度和宽度。
这是一个关于如何在DesignTime中设置用户控件大小的线程,这也可以为您澄清一些事情。
http://lfhck.com/question/157908/wpf-usercontrol-design-time-size
答案 2 :(得分:0)
您可以通过命名控件/元素而不是从应用程序项目访问它来实现这一点,此示例在WPF中,但在WinRT中也是如此:
MainWindow.Xaml :
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpfApplication1="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Grid>
<wpfApplication1:UserControl1 x:Name="UserControl1"></wpfApplication1:UserControl1>
</Grid>
</Window>
UserControl.Xaml :
<UserControl x:Class="WpfApplication1.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"
d:DesignHeight="300" d:DesignWidth="300">
<Grid x:Name="MainGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button x:Name="button">button in user control</Button>
</Grid>
</UserControl>
<强> MainWindow.cs 强>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Grid.SetColumn(UserControl1.button,1);
}
}
运行此示例时,按钮将显示在MainGrid的第二个列中。 请注意,我正在从CodeBehind更改布局,如果您仍想在Application Project中直接从Xaml进行更改,则应创建属性 在UserControl中并制作一些绑定的东西。