我正在尝试做类似这样的事情:
<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,但上面的例子简化了问题.有任何想法吗?
我一直在为 WPF 开发一个 SplitButton 控件,它基本上已经完成,但我正在尝试检查可以在其上设置的所有可能的属性,并确保它们得到实际实现。我主要只剩下两个属性要实现,即ItemTemplateand ItemTemplateSelector(和AlternationCount,好吧,3 个属性)。
我能得到HeaderTemplate并且HeaderTemplateSelector通过绑定工作ContentTemplate,并ContentTemplateSelector给他们上ContentPresenter。这是控件的按钮部分。对于控件的下拉部分,我使用的是 Popup、Border 和ItemsPresenter. 问题是,我想不出如何设置ItemTemplate和ItemTemplateSelector属性的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) 我正在开发一个自定义面板控件,我试图让它做的一件事是在运行时交换它的内容.此控件有两种状态:最大化和正常.当用户单击控件上的按钮时,状态切换.此控件有两个属性: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)