C# 如何在样式中添加行为
当我在XAML中添加Interaction.Behaviors的样式时,出现了如下错误。实际上,我只想添加公共样式,它将在每个视图中使用 那么,我应该添加更多吗 属性“行为”没有可访问的setter 属性“行为”不是从属属性。要在标记中使用,必须使用可访问的实例属性“Behaviors”在目标类型上公开非附加属性。对于附加属性,声明类型必须提供静态的“GetBehaviors”和“SetBehaviors”方法 我这行有错误C# 如何在样式中添加行为,c#,wpf,C#,Wpf,当我在XAML中添加Interaction.Behaviors的样式时,出现了如下错误。实际上,我只想添加公共样式,它将在每个视图中使用 那么,我应该添加更多吗 属性“行为”没有可访问的setter 属性“行为”不是从属属性。要在标记中使用,必须使用可访问的实例属性“Behaviors”在目标类型上公开非附加属性。对于附加属性,声明类型必须提供静态的“GetBehaviors”和“SetBehaviors”方法 我这行有错误 <Setter Property="e:Interac
<Setter Property="e:Interaction.Behaviors">
<Setter.Value>
这是我所有的示例源代码
<Window.Resources>
<Style x:Key="ToolTipTouchStyle" TargetType="{x:Type TextBlock}">
<!--<Setter Property="e:Interaction.Behaviors" Value="localToolTip:ToolTipTouchScreen" />-->
<Style.Setters>
<Setter Property="e:Interaction.Behaviors">
<Setter.Value>
<localToolTip:ToolTipTouchScreen />
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</Window.Resources>
public class ToolTipTouchScreen : Behavior<UIElement>
{
Timer timer { get; set; }
ToolTip toolTip { get; set; }
protected override void OnAttached()
{
base.OnAttached();
timer = new Timer();
timer.Interval = 5000;
timer.Elapsed += OnTimerElapsed;
AssociatedObject.MouseLeave += OnMouseLeave;
AssociatedObject.MouseLeftButtonUp += OnMouseLeftButtonUp;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.MouseLeave -= OnMouseLeave;
AssociatedObject.MouseLeftButtonUp -= OnMouseLeftButtonUp;
}
public void OnMouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
CloseToolTip();
}
public void OnMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (((dynamic)sender).ToolTip is string)
{
toolTip = new ToolTip();
toolTip.Content = ((dynamic)sender).ToolTip;
}
else
{
toolTip = (ToolTip)((dynamic)sender).ToolTip;
}
toolTip.IsOpen = true;
timer.Start();
}
private void CloseToolTip()
{
if (toolTip != null)
{
toolTip.IsOpen = false;
}
}
private void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
timer.Stop();
Application.Current.Dispatcher.BeginInvoke((Action)CloseToolTip, DispatcherPriority.Send);
}
}
公共类ToolTiptTouchScreen:行为
{
计时器{get;set;}
工具提示工具提示{get;set;}
受保护的覆盖无效附加()
{
base.onatached();
定时器=新定时器();
定时器间隔=5000;
timer.appeased+=ontimerecursed;
AssociatedObject.MouseLeave+=OnMouseLeave;
AssociatedObject.MouseLeftButtonUp+=OnMouseLeftButtonUp;
}
附加时受保护的覆盖无效()
{
base.OnDetaching();
AssociatedObject.MouseLeave-=OnMouseLeave;
AssociatedObject.MouseLeftButtonUp-=OnMouseLeftButtonUp;
}
MouseLeave上的公共无效(对象发送方,System.Windows.Input.MouseEventArgs e)
{
关闭工具提示();
}
MouseLeftButtonUp(对象发送方,System.Windows.Input.MouseButtonEventArgs e)上的公共void
{
如果(((动态)发件人)。工具提示为字符串)
{
工具提示=新工具提示();
内容=((动态)发送者)。工具提示;
}
其他的
{
工具提示=(工具提示)((动态)发送者)。工具提示;
}
toolTip.IsOpen=true;
timer.Start();
}
专用工具提示()
{
如果(工具提示!=null)
{
toolTip.IsOpen=false;
}
}
私有void onTimeRecursed(对象发送方,ElapsedEventArgs e)
{
timer.Stop();
Application.Current.Dispatcher.BeginInvoke((操作)关闭工具提示,DispatcherPriority.Send);
}
}
是否可以尝试在控件定义中设置它,如中所示
xmlns:behaviors="clr-namespace:MyNameSpace.Behavior;assembly=MyNameSpace"
<ControlType Text="Something">
<ControlType.Behaviors>
<behaviors:EmailValidatorBehavior />
</ControlType.Behaviors>
</ControlType>
xmlns:behaviors=“clr namespace:MyNameSpace.Behavior;assembly=MyNameSpace”
是否可以尝试在控件定义中设置它,如中所示
xmlns:behaviors="clr-namespace:MyNameSpace.Behavior;assembly=MyNameSpace"
<ControlType Text="Something">
<ControlType.Behaviors>
<behaviors:EmailValidatorBehavior />
</ControlType.Behaviors>
</ControlType>
xmlns:behaviors=“clr namespace:MyNameSpace.Behavior;assembly=MyNameSpace”