小编Thr*_*505的帖子

更改样式中按钮的内容?

我正在尝试做类似这样的事情:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid>
        <Button>
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Content"
                            Value="No mouse over" />
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver"
                                 Value="True">
                            <Setter Property="Content">
                                <Setter.Value>
                                    <CheckBox Content="Mouse is over" />
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个运行时XamlParseException,其消息为:

无法将"System.Windows.Controls.CheckBox"类型的内容添加到"System.Object"类型的对象中.对象'System.Windows.Controls.CheckBox出错

我实际上是在尝试根据外部条件为按钮的内容绘制不同的图标.所以我实际上是在尝试使用DataTrigger,但上面的例子简化了问题.有任何想法吗?

c# data-binding wpf xaml styles

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

WPF - 为 ItemsPresenter 实现 ItemTemplate?

我一直在为 WPF 开发一个 SplitButton 控件,它基本上已经完成,但我正在尝试检查可以在其上设置的所有可能的属性,并确保它们得到实际实现。我主要只剩下两个属性要实现,即ItemTemplateand ItemTemplateSelector(和AlternationCount,好吧,3 个属性)。

我能得到HeaderTemplate并且HeaderTemplateSelector通过绑定工作ContentTemplate,并ContentTemplateSelector给他们上ContentPresenter。这是控件的按钮部分。对于控件的下拉部分,我使用的是 Popup、Border 和ItemsPresenter. 问题是,我想不出如何设置ItemTemplateItemTemplateSelector属性的ItemsPresenter

有任何想法吗?


更新:SplitButton 的完整源代码现在可在:http ://anothersplitbutton.codeplex.com/

这是 Luna.NormalColor.xaml 文件:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:WpfSplitButton="clr-namespace:WpfSplitButton"
                    xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!-- SplitButtonHeader Style -->
    <Style x:Key="{x:Type WpfSplitButton:SplitButtonHeader}"
           TargetType="{x:Type WpfSplitButton:SplitButtonHeader}">

        <Style.Resources>
            <Style x:Key="ButtonFocusVisual">
                <Setter Property="Control.Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Rectangle Margin="2"
                                       StrokeThickness="1"
                                       Stroke="Black"
                                       StrokeDashArray="1 2"
                                       SnapsToDevicePixels="True" />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Style.Resources>

        <Style.Setters>
            <Setter Property="FocusVisualStyle" …
Run Code Online (Sandbox Code Playgroud)

c# wpf itemtemplate itemspresenter

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

WPF - 交换ContentControl(重新链接元素???)

我正在开发一个自定义面板控件,我试图让它做的一件事是在运行时交换它的内容.此控件有两种状态:最大化和正常.当用户单击控件上的按钮时,状态切换.此控件有两个属性:MaximizedContent和MinimizedContent.单击用于交换状态的按钮时,控件的Content属性需要在MaximizedContent和MinimizedContent之间交换.当MaximizedContent或MinimizedContent内部存在绑定时,问题就出现了.这似乎不是"树"的一部分,因此绑定不起作用......至少这是我的理论.所以我的问题是如何让它们成为树的一部分?

这是一个简化的例子:

MainWindow.xaml

<Window x:Class="SwappingContentTest.MainWindow"
        Loaded="Window_Loaded"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:local="clr-namespace:SwappingContentTest"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <StackPanel  HorizontalAlignment="Left">
        <Button x:Name="swapContentButton"
                Click="swapContentButton_Click"
                Content="Swap Content" />

        <local:SwappableContentControl x:Name="swappableControl">
            <local:SwappableContentControl.MaximizedContent>
                <StackPanel>
                    <CheckBox x:Name="maximizedCheckBox"
                              Content="Maximized CheckBox" />
                    <Button x:Name="maximizedButton"
                            Content="Maximized Button"
                            IsEnabled="{Binding ElementName=maximizedCheckBox, Path=IsChecked}" />
                </StackPanel>
            </local:SwappableContentControl.MaximizedContent>

            <local:SwappableContentControl.MinimizedContent>
                <StackPanel>
                    <CheckBox x:Name="minimizedCheckBox"
                              Content="Minimized CheckBox" />
                    <Button x:Name="minimizedButton"
                            Content="Minimized Button"
                            IsEnabled="{Binding ElementName=minimizedCheckBox, Path=IsChecked}" />
                </StackPanel>
            </local:SwappableContentControl.MinimizedContent>
        </local:SwappableContentControl>

        <CheckBox x:Name="standardCheckBox"
                  Content="Standard CheckBox"
                  Margin="0,20,0,0"/>
        <Button x:Name="standardButton"
                Content="StandardButton"
                IsEnabled="{Binding ElementName=standardCheckBox, Path=IsChecked}" />
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

MainWindow.cs

namespace SwappingContentTest
{
    public partial class MainWindow : Window
    {
        public …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding controls

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