-1

アイコンとテキストの組み合わせであるツールバー内のボタンのスタイルを作成しました。

<Style TargetType="{x:Type Button}" x:Key="BtStyle_ToolBar">
    <Setter Property="Foreground" Value="White" />
    <Setter Property="FontWeight" Value="Bold" />
    <Setter Property="FontFamily" Value="Segoe UI" />
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate DataType="{x:Type Button}">
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=Tag}" />
                    <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=Content}" 
                               VerticalAlignment="Center" />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

それを使用して:

<Button Name="Bt_Export" Content="{x:Static p:Resources.Export}" Command="{Binding Path=CmdExport}"
                Padding="5" Style="{StaticResource BtStyle_ToolBar}" Tag="Resources/export_excel_16x16.png"/>

問題は、実行時に即時ウィンドウに例外がスローされることです。

System.Windows.Data Error: 6 : 'ObjectSourceConverter' converter failed to convert value 'Resources/export_excel_16x16.png' (type 'String'); fallback value will be used, if available. BindingExpression:Path=Tag; DataItem='Button' (Name='Bt_Export'); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource') IOException:'System.IO.IOException: Cannot locate resource 'themes/resources/export_excel_16x16.png'.

しかし、設計時にはすべて正常に動作します...

この問題を解決するにはどうすればよいですか?

編集 (回避策)

ボタンの宣言からコンテンツ プロパティを削除しました。

<Button Name="Bt_Export" Style="{StaticResource BtStyle_ToolBar}">
      <DockPanel>
           <Image Source="/Resources/export_excel_16x16.png"/>
           <TextBlock VerticalAlignment="center" Text="{x:Static p:Resources.Export}"></TextBlock>
       </DockPanel>
 </Button>
4

2 に答える 2

1
<Button Name="Bt_Import" Command="{Binding Path=CmdImport}" Style="{StaticResource BtStyle_ToolBar}">
  <StackPanel>
    <TextBlock Text="{x:Static p:Resources.Import}"/>
    <Image Source="Resources/import_16x16.png"/>
  </StackPanel>
</Button>

または、テンプレート レベルで設定します。

<Style TargetType="{x:Type Button}" x:Key="BtStyle_ToolBar">
    <Setter Property="Foreground" Value="White" />
    <Setter Property="FontWeight" Value="Bold" />
    <Setter Property="FontFamily" Value="Segoe UI" />
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate DataType="{x:Type Button}">
                <StackPanel Orientation="Horizontal">
                    <Image Source="Resources/import_16x16.png" />
                    <TextBlock Text="Awesome" 
                               VerticalAlignment="Center" />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2012-05-16T16:43:24.313 に答える
0

ええと、それが不平を言っている画像は export_excel_16x16.png ですが、投稿した XAML は import_16x16.png について話していることに気づきましたか。エラーの原因を誤解していませんか? つまり、別の場所に XAML があり、それが問題になっています。そして Chris W. は、イメージのビルド アクションもチェックして正解です。

ありがとう

于 2012-05-16T16:45:24.160 に答える