- 題名: WPFでスタイル内の値の変更について
- 日時: 2008/09/18 16:12:36
- ID: 23022
- この記事の返信元:
- (なし)
- この記事への返信:
- [23023] Re[1]: WPFでスタイル内の値の変更について2008/09/18 18:53:19
- ツリーを表示
Run は Binding 使えなかったはずなので面倒ですが、 これくらいなら Text プロパティで代用できそう。 XAML の TextBlock と Image はちょっと変更。 <TextBlock Text="{Binding Path=Text}"" x:Name="textBlock"> <!-- 略。Run 要素は削除 --> </TextBlock> <Image Source="{Binding Path=Image}" x:Name="image"> <!-- 略 --> </Image> コードで、 ButtonContent クラスを用意して Text プロパティと Image プロパティを定義。 各ボタンの DataContext に希望の Text 及び Image を持った ButtonContent を設定。 みたいな感じでどうでしょう。
分類:[.NET]
WPFのButtonについて質問があります。
XAML側でButtonの外観を名前つきスタイルで定義して
ボタンの中にイメージと文字をセットしたいと思っています。
XAMLコードは以下のようなリストです。
<!--ボタンSTYLEの定義 -->
<Style x:Key="BtnStyle" TargetType="{x:Type Button}" BasedOn="{x:Null}">
<Setter Property="FocusVisualStyle" Value="{DynamicResource SimpleButtonFocusVisual}"/>
<Setter Property="Background" Value="{DynamicResource NormalBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource NormalBorderBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="Grid" Width="215" Height="85" ShowGridLines="False" HorizontalAlignment="Left" VerticalAlignment="Top">
<Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" Stroke="#FF000099" Width="200" Height="70" RadiusY="6" RadiusX="6" Grid.IsSharedSizeScope="False" ScrollViewer.CanContentScroll="False" x:Name="rectangle">
<Rectangle.BitmapEffect>
<DropShadowBitmapEffect Opacity="0.5" ShadowDepth="4"/>
</Rectangle.BitmapEffect>
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,-0.09" StartPoint="0.5,1.52">
<GradientStop Color="#FFAFAFAF" Offset="0"/>
<GradientStop Color="#FFFFFFFF" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<TextBlock Margin="62,21,-2,21" TextWrapping="Wrap" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" x:Name="textBlock">
<TextBlock.BitmapEffect>
<DropShadowBitmapEffect Color="#FFFFFFFF" ShadowDepth="2" Softness="0" Direction="325" Opacity="1"/>
</TextBlock.BitmapEffect>
<Run FontSize="18" FontWeight="Medium" Text="ボタン名称" Language="ja-jp"/></TextBlock>
<Image Margin="12,19,0,19.5" Width="40" Height="40" Source="c:\ImgDefault.png" HorizontalAlignment="Left" x:Name="image">
<Image.BitmapEffect>
<DropShadowBitmapEffect Opacity="0.5" ShadowDepth="3"/>
</Image.BitmapEffect>
</Image>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="true"/>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="BitmapEffect" TargetName="image">
<Setter.Value>
<OuterGlowBitmapEffect GlowColor="#FF000099" Opacity="0.7"/>
</Setter.Value>
</Setter>
<Setter Property="ClipToBounds" TargetName="image" Value="False"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Margin" TargetName="textBlock" Value="63,23,-2.333,20.001"/>
<Setter Property="Margin" TargetName="rectangle" Value="1,2,1.167,0.001"/>
<Setter Property="BitmapEffect" TargetName="rectangle">
<Setter.Value>
<DropShadowBitmapEffect Opacity="0.5" ShadowDepth="2"/>
</Setter.Value>
</Setter>
<Setter Property="BitmapEffect" TargetName="image">
<Setter.Value>
<OuterGlowBitmapEffect GlowColor="#FF000099" Opacity="0.7"/>
</Setter.Value>
</Setter>
<Setter Property="Margin" TargetName="image" Value="13,21,0,17.75"/>
</Trigger>
<Trigger Property="IsEnabled" Value="true"/>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
:
<Grid>
<Button Style="{StaticResource BtnStyle}" Name="btnTest1" Click="btnTest1_Click">
<Button Style="{StaticResource BtnStyle}" Name="btnTest2" Click="btnTest2_Click">
<Button Style="{StaticResource BtnStyle}" Name="btnTest3" Click="btnTest3_Click">
</Grid>
ここで質問なのですが、このままの状態だと当然ながら上記3つの
button(btnTest1〜btnTest3)の外観は全て同じイメージ(c:\ImgDefault.png)と
文字(「ボタン名称」)になってしまいます。
C#のコードの記述(初期処理)でスタイルの中のイメージの参照先と文字の内容を
可変的に変更することは可能なのでしょうか?
例えば、
btnTest1 のイメージは「c:\Image1.jpg」、文字列は「○○処理」
btnTest2 のイメージは「c:\Image2.jpg」、文字列は「××処理」
btnTest1 のイメージは「c:\Image3.jpg」、文字列は「▲▲処理」
といった具合に変更したいのです。
目的はメニュー画面でボタンの配置が決められており、メニュー構成用のマスタより
ボタンの名称、イメージをセットしようと考えております。