【发布时间】:2016-06-17 07:29:13
【问题描述】:
我正在处理icons.XAML 图像,将它们插入到文本块上方的按钮中。一切看起来都很棒,直到我将鼠标悬停在图像本身上。仅在图片上显示一个灰色框:
如何摆脱灰色框?
这是其中一个图标:
<Canvas x:Key="appbar_cog" Width="38" Height="46" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0" Background="Transparent">
<Path Width="37.6263" Height="37.6262" Canvas.Left="15" Canvas.Top="5" Stretch="Fill" Fill="#FF5DBEBE" Data="F1 M 27.5314,21.8628L 33.0126,19.4224L 34.7616,23.3507C 36.6693,22.9269 38.6044,22.8903 40.4668,23.2026L 42.0083,19.1868L 47.6098,21.337L 46.0683,25.3528C 47.6612,26.3669 49.0747,27.6889 50.2088,29.2803L 54.1371,27.5313L 56.5776,33.0126L 52.6493,34.7616C 53.0731,36.6693 53.1097,38.6043 52.7974,40.4668L 56.8131,42.0083L 54.6629,47.6097L 50.6472,46.0683C 49.6331,47.6613 48.3111,49.0748 46.7197,50.2089L 48.4686,54.1372L 42.9874,56.5776L 41.2384,52.6493C 39.3307,53.0731 37.3957,53.1097 35.5333,52.7974L 33.9918,56.8131L 28.3903,54.6629L 29.9318,50.6472C 28.3388,49.6331 26.9252,48.3111 25.7911,46.7196L 21.8628,48.4686L 19.4224,42.9873L 23.3507,41.2383C 22.9269,39.3307 22.8903,37.3957 23.2026,35.5332L 19.1869,33.9918L 21.3371,28.3903L 25.3528,29.9318C 26.3669,28.3388 27.6889,26.9252 29.2804,25.7911L 27.5314,21.8628 Z M 34.3394,29.7781C 29.7985,31.7998 27.7564,37.1198 29.7781,41.6606C 31.7998,46.2015 37.1198,48.2436 41.6606,46.2219C 46.2015,44.2002 48.2436,38.8802 46.2219,34.3394C 44.2002,29.7985 38.8802,27.7564 34.3394,29.7781 Z "/>
</Canvas>
这是我正在使用的按钮:
<Style x:Key="MenuButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Background" Value="#FF496161"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Name="Border"
BorderThickness="3"
Padding="4,2"
BorderBrush="#ff496161"
CornerRadius="3"
Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="Background" Value="White"/>
<Setter TargetName="Border" Property="BorderBrush" Value="DarkOrange" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是我调用图像的 MenuView:
</UserControl.Resources>
<ItemsControl ItemsSource="{Binding Path=MenuItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button x:Name="MenuButton" Width="110" VerticalContentAlignment="Top" HorizontalContentAlignment="Center" Margin="0 0 0 0" IsEnabled="{Binding Path=IsActive}"
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, Path=DataContext.MenuSelectedCommand}"
CommandParameter="{Binding Path=CommandName}" Style="{StaticResource MenuButtonStyle}">
<StackPanel x:Name="MenuPanel" Orientation="Vertical">
<MenuItem x:Name="Picture" HorizontalAlignment="Center" Icon="{Binding ImageAddress, Converter={StaticResource StringToResourceConverter}}" Background="Transparent"/>
<TextBlock x:Name="Words" HorizontalAlignment="Stretch" Margin="0 0 0 0" TextAlignment="Center" Text="{Binding Description}" FontFamily="Arial" FontSize="14" />
</StackPanel>
</Button>
<DataTemplate.Triggers>
<Trigger SourceName="MenuButton" Property="IsMouseOver" Value="True">
<Setter TargetName="Words" Property="Foreground" Value="Black"/>
</Trigger>
<Trigger SourceName="MenuButton" Property="IsMouseOver" Value="False">
<Setter TargetName="Words" Property="Foreground" Value="White"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Margin="0 0 0 0" Background="#496161">
</StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
编辑:这是为我的图标排序的 MenuItems 脚本。
namespace Inspection.Desktop.Common.ViewModel
{
public class MenuViewModel : BaseViewModel
{
public ObservableCollection<MenuItem> MenuItems { get; set; }
public MenuViewModel()
{
}
public override void InitiatedData()
{
MenuItems = new ObservableCollection<MenuItem>();
MenuItems.Add(new MenuItem { CommandName = "WorkList", Description = "My WorkList", ImageAddress = "appbar_home", RoleName = "Electrical", WirelessRequired = true });
MenuItems.Add(new MenuItem { CommandName = "Download", Description = "Download", ImageAddress = "appbar_cloud_download", RoleName = "Electrical", WirelessRequired = true });
MenuItems.Add(new MenuItem { CommandName = "FieldRequest", Description = "Field Request", ImageAddress = "appbar_input_pen", RoleName = "FAS", WirelessRequired = false });
MenuItems.Add(new MenuItem { CommandName = "Mileage", Description = "Mileage", ImageAddress = "appbar_transit_car", RoleName = "FAS", WirelessRequired = false });
MenuItems.Add(new MenuItem { CommandName = "Calendar", Description = "Calendar", ImageAddress = "appbar_calendar", RoleName = "FAS", WirelessRequired = true });
MenuItems.Add(new MenuItem { CommandName = "Assign", Description = "Assign", ImageAddress = "appbar_list_check", RoleName = "Electrical", WirelessRequired = true });
MenuItems.Add(new MenuItem { CommandName = "Reports", Description = "Reports", ImageAddress = "appbar_graph_line_up", RoleName = "Electrical", WirelessRequired = true });
MenuItems.Add(new MenuItem { CommandName = "PAIRS", Description = "Go To PAIRS", ImageAddress = "appbar_globe", RoleName = "Electrical", WirelessRequired = true });
MenuItems.Add(new MenuItem { CommandName = "Settings", Description = "Settings", ImageAddress = "appbar_cog", RoleName = "Electrical", WirelessRequired = false });
}
public override void InitiatedCommand()
{
MenuSelectedCommand = new RelayCommand<string>(MenuClicked);
}
public override void InitiatedMessages() { }
public RelayCommand<string> MenuSelectedCommand { get; private set; }
public void MenuClicked(string name)
{
//MenuItems.ToList().ForEach((menu)=> {
// menu.IsActive = menu.CommandName.ToLower() == name.ToLower() ? false : true;
// });
Utilities.Messenger.InspectionMessenger.SendMessage<string>(Messages.VIEW_CHANGED, name);
}
}
}
【问题讨论】:
-
是的,这似乎是一个非常一次性的场景。向我展示您正在寻找的最终结果的示例,我相信我们可以为您提供更清洁的解决方案。我为这种类型的事情做的是构建你的按钮模板,在绑定到标签属性的路径中拍打,并将所有“图标”也就是路径数据保存在资源字典中,这样我就可以像 静态资源就是该实例所需的任何图标。
-
在您的应用中是否有画布样式?
-
哦....您的“图片”嵌入为
MenuItem,它有自己的控制模板....您的背景来自amigo。 ;) ...您可以使这件事更有条理,并使用一小部分 xaml 和 DOM 对象提供相同的功能。 -
这是因为他们将其作为MenuItem 放入其中,通过高亮画笔为其背景边框赋予颜色#ddd 颜色。
-
是的,现在我所在的时区已经下班了,我有差事要跑,但明天我会告诉你一些事情。基本上,您的 ItemTemplate 将成为使用 ONE 样式的 ONE 按钮,您不必更改任何绑定,并且可以丢弃转换器和其余的垃圾,将仅是 xaml,您将完成。好吧,我认为至少,你是如何保存你的“ImageAddress”的?它只是一个带有路径数据的字符串吗?
标签: wpf xaml visual-studio-2015 app.xaml