2011-12-20 11 views
0

イメージソースを変更するために、コードビハインドから「イメージ」にアクセスするにはどうすればよいですか? XAMLコードは、すべてのヘルプは高く評価され、このSilverlightのコードビハインドからカスタムスタイルのコントロールにアクセスする方法は?

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
x:Class="Demo.ChartButton" 
d:DesignWidth="100" d:DesignHeight="100"> 
<UserControl.Resources> 
    <Style x:Key="ButtonStyle1" TargetType="Button"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Grid> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="MouseOver"> 
            <Storyboard> 
             <ColorAnimation Duration="0" To="White" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.Color)" Storyboard.TargetName="image" d:IsOptimized="True" /> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.ShadowDepth)" Storyboard.TargetName="image" d:IsOptimized="True"/> 
             <DoubleAnimation Duration="0" To="5" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.BlurRadius)" Storyboard.TargetName="image" d:IsOptimized="True"/> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.Opacity)" Storyboard.TargetName="image" d:IsOptimized="True"/> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Pressed"> 
            <Storyboard> 
             <ColorAnimation Duration="0" To="AntiqueWhite" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.Color)" Storyboard.TargetName="image" d:IsOptimized="True"/> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.Opacity)" Storyboard.TargetName="image" d:IsOptimized="True"/> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.Opacity)" Storyboard.TargetName="image" d:IsOptimized="True"/> 
             <ColorAnimation Duration="0" To="#FFAFAFAF" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.Color)" Storyboard.TargetName="image" d:IsOptimized="True"/> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 

         </VisualStateManager.VisualStateGroups> 
         <Image x:Name="image" RenderTransformOrigin="0,0" Source="/Demo;component/spreadsheet-icon.png" > 
          <Image.Effect> 
           <DropShadowEffect ShadowDepth="0" BlurRadius="10" Color="Black" Opacity="1"/> 
          </Image.Effect> 
         </Image> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 

<Button Content="" Margin="0,0,0,0" Style="{StaticResource ButtonStyle1}" Click="Button_Click" /> 

のように見えます。

答えて

2

これにアクセスする唯一の方法は、ビジュアルツリーをナビゲートしてイメージを見つけることです。 Linq-To-VisualTreeを使用すると、次のように見つけることができます。

using LinqToVisualTree 

private void Button_Click(object sender, EventArgs e) 
{ 
    Button button = sender as Button; 
    Image img = button.Descendants<Image>().Single() as Image; 
    img.Source = "..." 
} 
+0

ありがとうございます。私はそれをしてそれを探している簡単な方法があるかもしれないと思った。 – EEE

+0

残念ながら。しかし、より良いアプローチは、Image Sourceを依存関係プロパティとして公開する独自のButtonサブクラスを作成することです。 – ColinE

+0

どうすればいいですか?サンプルコードを投稿できますか? – EEE

関連する問題