Windows 8 更改用户控件的源文件

Windows 8 更改用户控件的源文件,windows-8,user-controls,windows-store-apps,winrt-xaml,Windows 8,User Controls,Windows Store Apps,Winrt Xaml,我的问题是我有一个类库,其中定义了一些用户控件。我有几个项目使用这个库。在其中一个项目中,我需要更改控件的布局。是否可以在应用程序项目中重新定义Xaml文件以更改用户控件的布局?您只需在其Xaml文件中将UserControl根元素(布局)的宽度和高度设置为“自动”,然后,您可以根据需要从应用程序项目中编辑其高度和宽度 这里有一个关于如何在DesignTime中设置用户控件大小的线程,这可能也会向您澄清一些问题 您可以通过命名控件/元素而不是从应用程序项目中访问它们来实现这一点,本例在WPF中,

我的问题是我有一个类库,其中定义了一些用户控件。我有几个项目使用这个库。在其中一个项目中,我需要更改控件的布局。是否可以在应用程序项目中重新定义Xaml文件以更改用户控件的布局?

您只需在其Xaml文件中将UserControl根元素(布局)的宽度和高度设置为“自动”,然后,您可以根据需要从应用程序项目中编辑其高度和宽度

这里有一个关于如何在DesignTime中设置用户控件大小的线程,这可能也会向您澄清一些问题


您可以通过命名控件/元素而不是从应用程序项目中访问它们来实现这一点,本例在WPF中,但在WinRT中是相同的:

主窗口.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 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>
运行此示例时,该按钮将出现在主网格的第二个网格中。 请注意,我正在从CodeBehind更改布局,如果您仍然希望在应用程序项目中直接从Xaml进行更改,则应该创建属性
在UserControl中创建一些绑定内容。

我可以建议您使用错误的解决方案来处理此问题吗?首先,我承认你想要的在技术上是可能的。事实上,如果需要,您可以在运行时生成XAML,并使其无限动态。但当解决方案如此简单时,这就太复杂了

视觉状态

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Grid.SetColumn(UserControl1.button,1);
        }
    }
可视状态可用于定义控件或控件组的布局。然后,让您定义控件或控件组的另一个布局。然后,再一次。当您的控件应该单向查看
横向
时,您可以更改
状态
。当控件应单向查看
纵向
时,您可以更改
状态
。而且,当您的控件对于正在使用它的某个应用程序看起来完全不同时,您只需切换
状态

此解决方案为您提供了通过XAML工具提供的完整设计时支持。它还与XAML的预期使用方式保持一致。而且,这是最简单的。我想至少是这样

请阅读以下内容:


谢谢你的回答。改变宽度和高度是一个微不足道的问题。但在我的例子中,我需要改变根元素中几乎所有控件的位置。谢谢。若我在应用程序的页面中使用我的用户控件,这个方法将对我有所帮助。但在某些情况下,页面也是类库的一部分。所以我不能从代码隐藏更改布局。我认为解决这个问题的唯一方法是将Xaml文件从库更改为应用程序项目中定义的另一个库。这样可以保存类库中的所有逻辑。你的方法真的解决了我的问题!唯一的困难是定义哪个应用程序使用库。正如我所知,它可以通过汇编对象来完成。非常感谢。不要那样做。让消费应用告诉你吧。向用户控件添加自定义依赖项属性,并在应用程序使用该属性时设置该属性。如果我是你,则默认设置该属性,以便大多数应用程序不需要设置属性。如果控件被大量使用,那么您可以设置一个静态变量,该变量可以全局设置,以便应用程序设置它,并且所有控件都读取该设置。