相关疑难解决方法(0)

ContentControl和ContentPresenter有什么区别?

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

.net wpf contentpresenter contentcontrol

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

"UserControl"类型不支持直接内容

我有一个Outlook 2013和2016 VSTO加载项项目,我试图描述一个WPF用户控件添加到自定义任务窗格这里.

我遇到的问题是,当我添加用户控件(WPF)时,它会生成一个带网格的WPF控件,但会自动抛出"类型'UserControl'不支持直接内容"的错误.

WPF生成:

<UserControl x:Class="TestNamespace.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" 
         xmlns:local="clr-namespace:TestNamespace"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>

</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

我知道在过去我不得不将WPF项目类型的guid添加到.proj文件中以使一些工作正常工作,但添加它没有任何区别(实际上它甚至不会按特定顺序加载).

原版的:

<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Run Code Online (Sandbox Code Playgroud)

崩溃:

<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Run Code Online (Sandbox Code Playgroud)

不崩溃,但不修复错误:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?

UPDATE

我尝试直接创建一个新的类库项目,添加了一个WPF用户控件,然后添加了对System.Xaml的引用,我有同样的问题.

c# wpf xaml user-controls outlook-addin

55
推荐指数
5
解决办法
3万
查看次数

FontSize 未在 Contentpresenter 和 ContentControl 中继承的解决方法

试图使 UserControl 可以承载其他控件。以下是相关代码。

<UserControl … … … … >
  <Grid DataContext="{Binding RelativeSource={RelativeSource 
            Mode=FindAncestor, AncestorType={x:Type UserControl}}}">
      … … …
     <ContentPresenter Content="{Binding SomeContent}"/>
      … … …
  </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

并使用此 UserControl 如下 -

<myCtrl:ContainerUserControl FontSize="18pt">
    <myCtrl:ContainerUserControl.SomeContent>
        <Grid>
            <TextBox Text="Hello World"/>
        </Grid>
    </myCtrl:ContainerUserControl.SomeContent>
</myCtrl:ContainerUserControl >
Run Code Online (Sandbox Code Playgroud)

问题是 FontSize 没有继承到 TextBox。我可以将 FontSize 设置为 TextBox 但这不是一个优雅的解决方案。我试过使用 ContentControl 但没有改变。也尝试使用

<ContentPresenter TextElement.FontSize="{Binding FontSize}" Content="{Binding SomeContent}"/>
Run Code Online (Sandbox Code Playgroud)

也不行。FontSize 并不是我唯一担心的事情。我可能还需要其他属性来继承。

可以做些什么来解决这个问题?

wpf xaml

5
推荐指数
1
解决办法
902
查看次数