Я использую WPF и С#. Я пытаюсь создать собственный TabItem, который содержит кнопку закрытия. Я следовал руководству и сумел заставить его работать, однако я хотел использовать изображения для кнопок закрытия. Попробовав это, я наткнулся на некоторые исключения.
Исключение первого шанса типа «System.Deployment.Application.InvalidDeploymentException» произошло в System.Deployment.dll Исключение первого шанса типа «System.IO.DirectoryNotFoundException» произошло в mscorlib.dll Исключение первого шанса типа «System.IO В PresentationCore.dll произошло исключение .DirectoryNotFoundException. В mscorlib.dll произошло первое случайное исключение типа «System.IO.DirectoryNotFoundException».
Я считаю, что это жалуется на то, что источник изображения не найден. Чтобы установить источник изображения, я использовал панель свойств и выбрал соответствующий ресурс в раскрывающемся меню «Источник». Это должно быть хорошо, как есть, но это совсем не хорошо.
Мне было интересно, может ли кто-нибудь дать мне несколько голов о том, что делать? Это странно, потому что если он говорит, что ресурсы не найдены, значит, ресурсы есть. Я добавил изображения с помощью Resources.resx, и он добавил их в папку «Ресурсы». Это все есть... просто моему XAML это не нравится.
Вот мой XAML
<UserControl x:Class="WpfApplication1.CloseableHeader"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="23" d:DesignWidth="81" Margin="0">
<UserControl.Resources>
<Style TargetType="Button" x:Key="close_hover">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Image Source="pack://siteoforigin:,,,/Resources/CloseIco.png" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="Button" x:Key="close_normal">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Image Source="pack://siteoforigin:,,,/Resources/CloseIco_BW.png" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<Button
Name="button_close"
ToolTip="Close"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Margin="0,0,5,0"
Width="14"
Height="14"
Style="{DynamicResource close_normal}"/>
<Label Content="TabItem" Height="23" HorizontalAlignment="Left"
Margin="4,1,0,0" Name="label_TabTitle" VerticalAlignment="Top"
FontFamily="Courier" FontSize="12" />
</Grid>
I should also note that in the Designer View on Visual Studio, it displays the tabs as they should be (with the images!).
Заранее спасибо.
ОБНОВИТЬ
Теперь я продвинулся в своем проекте, единственная проблема, с которой я сталкиваюсь, заключается в том, что пути в Visual Studio не существуют, но когда я отлаживаю, они существуют. Папка ресурсов находится внутри bin/Debug, так что изображения будут отображаться при отладке... но это означает, что в результате у меня всегда будут ошибки в конструкторе. Есть ли способ исправить это, чтобы он работал для обоих?
Вот обновленный XAML (значительное изменение)
<UserControl x:Class="WpfApplication1.CloseableHeader"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="23" Margin="0">
<UserControl.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Name="border"
BorderThickness="0"
>
<Border.Background>
<ImageBrush ImageSource="pack://siteoforigin:,,,/Resources/CloseIco_BW.png" />
</Border.Background>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border">
<Setter.Value>
<ImageBrush ImageSource="pack://siteoforigin:,,,/Resources/CloseIco.png" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid Background="White">
<Button
Name="button_close"
ToolTip="Close"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Margin="0,0,5,0"
Width="14"
Height="14"/>
<Label Content="TabItem" Height="23" HorizontalAlignment="Left"
Margin="4,1,19,0" Name="label_TabTitle" VerticalAlignment="Top"
FontFamily="Courier" FontSize="12" />
</Grid>