更改用户控件的源文件

时间:2014-01-30 12:24:32

标签: windows-8 user-controls windows-store-apps winrt-xaml

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

3 个答案:

答案 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中并制作一些绑定的东西。