相关疑难解决方法(0)

何时对UserControl使用模板化控件?

我正在寻找一些关于如何在WinRT中创建自定义控件的教程,我有一个问题.

假设我想创建一个包含一些东西的简单控件,比如左边是图像的Grid,右边是几个TextBlocks.

我的意思是,简单的事情:

<Grid Height="100">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0.3*"/>
        <ColumnDefinition Width="0.7*"/>
    </Grid.ColumnDefinitions>
    <Image Source"/Assets/someRandomImage.png"/>
    <StackPanel Grid.Column="1"
                VerticalAlignment="Center">
        <TextBlock Text="Some text"
                   Margin="10,0,10,0"
                   FontSize="24"
                   FontWeight="SemiLight"
                   TextTrimming="CharacterEllipsis"/>
        <TextBlock Text="Some random description..."
                   Margin="10,5,10,0"
                   FontSize="18"
                   FontWeight="Light"
                   Foreground="Gray"
                   TextWrapping="Wrap"
                   TextTrimming="CharacterEllipsis"/>
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

我会用这个内容创建一个UserControl,所以当我正在处理它的UI时,我将能够在XAML Designer中看到它,并且我将在UserControl代码中添加所有Properties和DependencyProperties.

然后我看到另一种方法是使用Template控件,所以我必须创建一个继承自Control类的类,然后使用上面的XAML代码作为模板并将其应用于自定义控件并添加所有其余的逻辑在那里.

当然,我还必须将x:Name属性添加到控件中的一些UIElements以便能够与它们进行交互,但是你明白了.

我想知道,使用这两种方法中的任何一种方法都可以,或者更好地使用一种方法,为什么呢?此外,我喜欢使用UserControls,因为我可以在Designer窗口中看到它们,而我无法使用模板执行此操作,我必须运行应用程序并创建控件的实例以查看它是什么实际上看起来像.

感谢您的帮助,我想我不是唯一一个有这种疑问的人,所以我希望这个问题能够帮助其他人:D

塞尔吉奥

xaml windows-runtime win-universal-app uwp uwp-xaml

21
推荐指数
1
解决办法
8484
查看次数

WPF - 使用DataTemplates将数据绑定到StackPanel

我已经修改了我的问题,因为它在尝试时已经改变了焦点.我把问题缩小到以下......

我尝试将TreeView的选定项绑定到StackPanel(或其他一些可以容纳用户控件的容器).然后,此容器将显示UserControl,具体取决于所选项目的类型.

这是StackPanel的xaml(树视图和stackpanel都在同一个窗口中==>不同的网格列)

<StackPanel Grid.Column="2" MinWidth="500" DataContext="{Binding ElementName=myTree, Path=SelectedItem, Mode=OneWay}">
    <StackPanel.Resources>
        <DataTemplate DataType="{x:Type mvTypes:MyTypeA}">
            <controls:UserControlA DataContext="{Binding}" />
        </DataTemplate>
        <DataTemplate DataType="{x:Type mvTypes:MyTypeB}">
            <controls:UserControlB DataContext="{Binding}" />
        </DataTemplate>
    </StackPanel.Resources>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

当我将用户控件直接放在stackpanel下(而不是在资源中)时,它会将所选对象显示为datacontext.同上,如果我在其中放置一个TextBox,它将显示所选项目的正确类型.

<TextBox Name="textBox1" Text="{Binding}" />
Run Code Online (Sandbox Code Playgroud)

出于某种原因,将其放在DataTemplate中(即使不设置DataType)也不会显示任何内容.

任何sugestions.我想也许StackPanel可能不适合这个,虽然我似乎找不到其他适合像这样的容器的控件.

提前致谢.

data-binding wpf datatemplate

10
推荐指数
1
解决办法
2万
查看次数

WPF控件继承

我在博客中读到了以下句子:

WPF的第一条规则:
避免控制继承.

我在其他地方也见过类似的东西.但是,我无法理解逻辑.

此外,我在StackOverflow中看到了涉及继承WPF控件的建议(例如,参见我之前问题的回复).

我想了解为什么(以及如果)控制继承应该避免.

wpf inheritance

7
推荐指数
1
解决办法
5726
查看次数

UWP中的模板控制与自定义控制.网上找不到明确的答案

在我的UWP应用程序中,我的控制选项是用户控制和模板控制.我对用户控件的理解在这一点上很清楚.

有人告诉我,自定义控件的样式/模板只在内存中实例化一次,而这只发生在第一次使用控件时.这就是我想要的,因为我知道我正在创建的控件将在ListView中使用.

然而,在本书XAML Unleashed中,作者通过从用户控件开始创建自定义控件,然后简单地更改它的基类.问题在于他创建的控件InitializeComponent().我听说这种类使用更多内存,因为它为ListView中的每个项重新实例化.

此外,我从未想过自定义控件使用了该InitializeComponent()方法.我以为this.DefaultStyleKey = typeof(MyClass);在构造函数中只有一个调用.是什么赋予了?我很困惑什么是......

最后,为什么模板控件的样式/模板放在全局Generic.xaml文件中,而不是它自己的单独文件(即xaml文件和代码隐藏文件对)?如果控件应该是自定义的和"可移植的",那么它不应该与其他代码完全分开吗?我没有发现任何一篇文章在任何级别上都详细解释了这些内容.

c# wpf xaml templates uwp

4
推荐指数
1
解决办法
1988
查看次数