gpt4 book ai didi

c# - 工具栏拖动绑定(bind)失败

转载 作者:行者123 更新时间:2023-12-03 10:36:28 29 4
gpt4 key购买 nike

我有一个 ToolBar我正在使用下面显示的代码进行样式设置。我的 ToolBar 遇到了三个问题造型:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org">
<Style x:Key="ToolBarToggleButton" TargetType="{x:Type ToggleButton}"
BasedOn="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}">
<Setter Property="Icon" Value="{Binding Icon}"/>
<Setter Property="ToolTip" Value="{Binding FullToolTip}" />
<Setter Property="ToolTipService.IsEnabled" Value="{Binding HasToolTip}" />
<Setter Property="IsChecked" Value="{Binding IsChecked}" />
<Setter Property="cal:Action.Target" Value="{Binding}" />
<Setter Property="cal:Message.Attach" Value="{Binding ActionText}" />
</Style>
...

第一的:

工具栏图像目前被用作单个静态实例。即使有属性(property) x:Shared="False"搬家 ToolBar一个接一个会导致渲染失败。

Failure

解决方案:

在 ToolTip Styles.xaml 中,将图像源包含为 ContentTemplate
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org">
<Style x:Key="ToolBarToggleButton" TargetType="{x:Type ToggleButton}"
BasedOn="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image x:Shared="false" Source="{Binding Icon}">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Width" Value="16" />
<Setter Property="Height" Value="16" />
<Setter Property="Stretch" Value="Fill" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5" />
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="ToolTip" Value="{Binding FullToolTip}" />
<Setter Property="ToolTipService.IsEnabled" Value="{Binding HasToolTip}" />
<Setter Property="IsChecked" Value="{Binding IsChecked}" />
<Setter Property="cal:Action.Target" Value="{Binding}" />
<Setter Property="cal:Message.Attach" Value="{Binding ActionText}" />
</Style>

<Style x:Key="ToolBarButton" TargetType="{x:Type Button}"
BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image x:Shared="false" Source="{Binding Icon}">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Width" Value="16" />
<Setter Property="Height" Value="16" />
<Setter Property="Stretch" Value="Fill" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5" />
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="ToolTip" Value="{Binding FullToolTip}" />
<Setter Property="ToolTipService.IsEnabled" Value="{Binding HasToolTip}" />
<Setter Property="cal:Action.Target" Value="{Binding}" />
<Setter Property="cal:Message.Attach" Value="{Binding ActionText}" />
</Style>
</ResourceDictionary>

现在我们有:

Fix

无需其他更改。

第二:
ToolTip同样的拖拽过程和 ToolTipService绑定(bind)也被破坏 - 在这个阶段我不确定根本原因。快速的解决方案是按照我对上图所做的操作并添加 ToolTipImage .但是,这会导致 ToolTip仅在超过 Image 时显示而不是在将鼠标悬停在按钮的最边缘时。

部分解决方案:

添加 ToolTipImage .但是,这并不理想,因为工具提示在按钮的最边缘时不会显示。

第三:

当上面显示的拖动操作发生时,这也会破坏 Caliburn 属性绑定(bind)
<Setter Property="cal:Action.Target" Value="{Binding}" />
<Setter Property="cal:Message.Attach" Value="{Binding ActionText}" />

问题:(第二和第三题)
  • 如何解决 ToolTip 的问题渲染?
  • 如何解决 Caliburn 属性绑定(bind)的问题?

  • 谢谢你的时间。

    解决方案:

    “我终于解决了这个问题。据我所知,当您在工具栏上启动拖动时,您拖动的工具栏所覆盖的其他工具栏上的任何工具栏项目都会从它们在可视树中的当前位置删除,然后(大概)在它们再次可见时添加回来。

    当它们从可视化树中移除时(同样,这就是我认为正在发生的情况),它们也会失去对 ToolBarToggleButton 和 ToolBarButton 样式的访问权限,因为它们是在添加到 ToolBarsView.xaml 的 Styles.xaml 资源字典中定义的。

    但是,如果您在全局范围内定义这些相同的样式,那么它就可以工作 - 大概,即使它们不再是 ToolBarsView 的子项,它们仍然可以访问全局资源。

    所以...我添加了一个新属性 IModule.GlobalResourceDictionaries,它允许每个模块声明应在全局范围内添加的任何资源字典。 ToolBars 模块利用了这一点。”

    https://github.com/tgjones/gemini/issues/67#issuecomment-60040008

    最佳答案

    尝试将工具提示重新分配为鼠标悬停事件的样式触发器,例如:

        <Button.Style>
    <Style TargetType="Button">
    <Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
    <Setter Property="ToolTip" Value="{Binding FullToolTip}" />
    <Setter Property="ToolTipService.IsEnabled" Value="{Binding HasToolTip}" />
    </Trigger>
    <Trigger Property="IsMouseOver" Value="False">
    <Setter Property="ToolTip" Value="{Binding FullToolTip}" />
    <Setter Property="ToolTipService.IsEnabled" Value="{Binding HasToolTip}" />
    </Trigger>
    </Style.Triggers>
    </Style>
    </Button.Style>

    关于c# - 工具栏拖动绑定(bind)失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26314945/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com