标签: contentcontrol

ContentControl和ContentPresenter有什么区别?

我不确定何时应该使用ContentPresenter而不是ContentControl(反之亦然).目前,我ContentControl几乎一直在使用我DataTemplate的.何时会ContentPresenter是更好的选择?为什么?

.net wpf contentpresenter contentcontrol

200
推荐指数
3
解决办法
8万
查看次数

当ContentControl的内容为null或为空时,在ContentControl中显示默认的DataTemplate?

我认为这是可能的,但显而易见的方法是行不通的.

目前,我这样做:

<ContentControl
    Content="{Binding HurfView.EditedPart}">
    <ContentControl.Resources>
        <Style
            TargetType="ContentControl"
            x:Key="emptytemplate">
            <Style.Triggers>
                <DataTrigger
                    Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Content}"
                    Value="{x:Null}">
                    <Setter
                        Property="ContentControl.Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Grid
                                    HorizontalAlignment="Stretch"
                                    VerticalAlignment="Stretch">
                                    <TextBlock>EMPTY!</TextBlock>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Resources>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

我没有得到任何绑定错误,这编译.但是,它不会产生预期的结果.我也试过了这个显而易见的事情:

<DataTemplate DataType="{x:Null}"><TextBlock>Hurf</TextBlock></DataTemplate>
Run Code Online (Sandbox Code Playgroud)

这不会编译.并且尝试两次设置内容也会失败:

<ContentControl
    Content="{Binding HurfView.EditedPart}">
        <TextBlock>DEFAULT DISPLAY</TextBlock>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

我可以不编写自定义模板选择器吗?

wpf datatemplate default-value contentcontrol

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

如何在代码中设置控制模板?

我在XAML中有这个

<ControlTemplate TargetType="{x:Type Button}">
    <Image ...>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

我希望在C#代码中实现相同的功能.我怎样才能做到这一点?

ControlTemplate ct = new ControlTemplate();..
Image img = new Image();..
Run Code Online (Sandbox Code Playgroud)

现在如何将此图像分配给控制模板?我们能做到这一点还是我错过了这里的概念?

c# wpf xaml contentcontrol

30
推荐指数
2
解决办法
5万
查看次数

什么是ContentControl.Template和ContentControl.ContentTemplate之间的区别

ContentControl.Template和ContentControl.ContentTemplate有什么区别?我何时使用哪个?

例如,我可以在WPF的xaml文件中写入:

<ContentControl>
    <ContentControl.Template>
        <ControlTemplate>
            <Label Content="This is from the Template"/>
        </ControlTemplate>
    </ContentControl.Template>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

注意ContentControl.模板标签

或者我可以这样写:

<ContentControl>
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Label Content="This is From the ContentTemplate"/>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

注意ContentControl.ContentTemplate标签

输出看起来相同,在第一种情况下,我使用ControlTemplate,在另一种情况下使用DataTemplate.但是,如果我必须使用.Template或.ContentTemplate,我应该怎么做?这有什么影响(例如DataBinding,Property Inheritance,...).

.net c# wpf xaml contentcontrol

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

为动态内容绑定ContentControl内容

我目前正在尝试通过使用ListView(作为选项卡)和带有绑定内容属性的ContentControl来实现带有隐藏选项卡的tabcontrol的功能.

我读了一下这个主题,如果我做对了,它应该这样工作:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="20.0*"/>
        <ColumnDefinition Width="80.0*"/>
    </Grid.ColumnDefinitions>
    <ListBox Grid.Column="0">
        <ListBoxItem Content="Appearance"/>
    </ListBox>

    <ContentControl Content="{Binding SettingsPage}" Grid.Column="1"/>
</Grid>
.
.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ContentControl x:Key="AppearancePage">
        <TextBlock Text="Test" />
    </ContentControl>
    <ContentControl x:Key="AdvancedPage">
        <TextBlock Text="Test2" />
    </ContentControl>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

并在代码背后:

public partial class MainWindow : MetroWindow
  {
    private ContentControl SettingsPage;
    private ResourceDictionary SettingsPagesDict = new ResourceDictionary();

    public MainWindow()
    {
        InitializeComponent();

        SettingsPagesDict.Source = new Uri("SettingsPages.xaml", UriKind.RelativeOrAbsolute);
        SettingsPage = SettingsPagesDict["AppearancePage"] as ContentControl;
Run Code Online (Sandbox Code Playgroud)

尽管它没有抛出任何错误,但它不会显示"Test"TextBlock.

我可能有错误的绑定概念,请给我一个正确方向的提示.

问候

c# wpf xaml binding contentcontrol

28
推荐指数
1
解决办法
6万
查看次数

如何绑定到ContentControl的Datatemplate中的数据

我有以下简化示例:

    <Window x:Class="TemplateBinding.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary
                            Source="pack://application:,,,/TemplateBinding;component/PersonTemplate.xaml" />
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Window.Resources>
        <Grid>
            <ContentControl ContentTemplate="{StaticResource PersonTemplate}" />
        </Grid>
    </Window>
Run Code Online (Sandbox Code Playgroud)

附:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

        <DataTemplate x:Key="PersonTemplate">
            <Border Width="100" Height="100" Background="RosyBrown">
                <TextBlock Text="{Binding Path=FirstName}" VerticalAlignment="Center" TextAlignment="Center"/>
            </Border>
        </DataTemplate>

    </ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

作为我的DataTemplate在一个单独的ResourceDictionary文件中.

我在我的MainWindow的Construcor中设置了我的DataContext,并通过显示如下的第一个名称来验证它:<ContentControl Grid.Row="1" Content="{Binding FirstName}"/>.

在另一个场景中,我使用DataTemplate与我在DataTemplate中以ListBox完全相同的方式进行绑定,它只是起作用.

我知道DataTemplate除了绑定之外正在工作,因为它正确显示了大小和背景颜色.

我究竟做错了什么?我的DataTemplate中的绑定如何看?

data-binding wpf datatemplate resourcedictionary contentcontrol

26
推荐指数
1
解决办法
3万
查看次数

从DataTemplateSelector显式刷新DataTemplate?

我将ContentControl.DataTemplateSelector设置为我想要的.
我希望根据命令或其他任何东西,调用ContentControl以通过xaml或代码从选择器重新选择模板.

谢谢

wpf xaml datatemplate contentcontrol datatemplateselector

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

内容控制内容调整以填充Silverlight 4

我有一个ContentControl的样式,我想在我目前有边框的地方使用它.当我使用它时,子控件不会伸展到填充,只占用少量空间.我已经尝试将Horizo​​ntalAlignment ="Stretch"应用于所有内容,但它不起作用.怎么了?

<Style x:Key="GradientPanel" TargetType="ContentControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Grid HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                    <Rectangle RadiusY="10" RadiusX="10" Stroke="Black" StrokeThickness="0">
                        <Rectangle.Effect>
                            <DropShadowEffect Opacity="0.56" ShadowDepth="1" BlurRadius="3" />
                        </Rectangle.Effect>
                        <Rectangle.Fill>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FFE1EAF3"/>
                                <GradientStop Color="White" Offset="1"/>
                                <GradientStop Color="#FFFAFBFD" Offset="1"/>
                            </LinearGradientBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                    <ContentPresenter Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

...

之前(工作正常):

<Border Style="{StaticResource SearchContainerBorder}" >
    <Grid Margin="5">
        <Grid.RowDefinitions>
            <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <ToggleButton  Style="{StaticResource ToggleButtonExpanderStyle}" Grid.Row="0" Grid.Column="1" Height="25" Width ="25" HorizontalAlignment="Center" …
Run Code Online (Sandbox Code Playgroud)

silverlight contentcontrol

13
推荐指数
1
解决办法
9648
查看次数

在ContentControl崩溃中绑定

任何人都可以告诉我为什么这会崩溃我的应用程序?似乎有一些无休止的递归,我无法弄清楚为什么.我得到了这个例外

遍历树时超出了逻辑树深度.这可能表明树中有一个循环

<ContentControl Content="{Binding}">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Button Content="{Binding MyString}"/>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的所有资源

    public MainWindow()
    {
        InitializeComponent();
        MyString = "Test";
        this.DataContext = this;
    }

    public string MyString { get; set; }
Run Code Online (Sandbox Code Playgroud)

wpf xaml binding contentcontrol

11
推荐指数
1
解决办法
3923
查看次数

多重绑定到IsEnable

我需要绑定一个TextBox符合两个标准:

  • 如果Text.Length> 0,则为IsEnabled
  • IsEnabled if user.IsEnabled

user.IsEnabled从数据源中提取出来.我想知道是否有人有一个简单的方法来做到这一点.

这是XAML:

<ContentControl IsEnabled="{Binding Path=Enabled, Source={StaticResource UserInfo}}"> 
    <TextBox DataContext="{DynamicResource UserInfo}" Text="{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding Path=Text, RelativeSource={RelativeSource Self}, Converter={StaticResource LengthToBool}}"/> 
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

wpf textbox contentcontrol isenabled

9
推荐指数
2
解决办法
9367
查看次数