c# - 绑定(bind)ContentPresenter的内容

标签 c# .net wpf xaml visual-studio-2012

我正在制作一个自定义标签

Border CornerRadius="10"  Background="#428bca" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
        <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" >
            <TextBlock.Foreground>
                White
            </TextBlock.Foreground>
        </ContentPresenter>
    </Border>

我想以这样的方式绑定(bind) ContentPresenter 的内容,当我更改内容的长度时,边框的 size(宽度和高度)将得到自动调整,这样我就不必手动更改它。

最佳答案

以下标签应该可以满足您的要求。请注意,如果它是例如的 child 对于 Grid,您必须将对齐属性设置为默认 Stretch 的其他值,因为否则 Label 将由 Panel 调整大小(例如调整为它所占用的 Grid 单元格的大小) .

<Label Content="Hello, World."
       BorderBrush="Black"
       BorderThickness="2"
       HorizontalAlignment="Left"
       VerticalAlignment="Top">
    <Label.Template>
        <ControlTemplate TargetType="Label">
            <Border CornerRadius="10" Background="#428bca"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                <ContentPresenter Margin="{TemplateBinding Padding}"
                    Content="{TemplateBinding Content}"
                    ContentTemplate="{TemplateBinding ContentTemplate}"/>
            </Border>
        </ControlTemplate>
    </Label.Template>
</Label>

为了对所有标签重用此 ControlTemplate,您可以将其置于默认标签样式中:

<Style TargetType="Label">
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Setter Property="VerticalAlignment" Value="Top"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Label">
                <Border CornerRadius="10" Background="#428bca"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <ContentPresenter Margin="{TemplateBinding Padding}"
                        Content="{TemplateBinding Content}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

关于c# - 绑定(bind)ContentPresenter的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22064322/

相关文章:

c# - 仅使用 C#/.NET 重命名 .Zip 条目?

c# - 在 C# 中创建类型列表

javascript - .net 2.0 : getting all keys and values pairs from object, 从 JS 传递过来

.net - 在 mvvm Light viewmodel 中使用 Web Context 的问题

c# - 窗口句柄单击事件

c# - DateTime.TryParseExact 将我日期中的月份错误地解析为一月

c# - 如何删除 Access Db 的临时 ldb 文件

c# - 通过网络代理使用 Azure KeyVault 配置提供程序会引发 HTTP 407 异常

wpf - TabControl:SelectedContent 和 SelectedItem 返回相同

wpf更改tabitem形状和tabpanel空间