2013-11-25 6 views
1

Я разрабатываю плеер на основе Silverlight 5 по шаблону MVVM. Я пытаюсь изменить кнопки статуса в коде позади.элемент элемента доступа silverlight

Файл: PlayerPage.xaml
Мой плеер компонент XAML:

<Grid x:Name="LayoutRoot"> 
    <player:Player x:Name="Player" 
        Playlist="{Binding Playlist}" 
        CurrentPlaylistItem="{Binding CurrentPlaylistItem, Mode=TwoWay}" 
        IsSeekingEnabled="{Binding CanSeek}" 
        AutoLoad="True" 
        AutoPlay="True" 
        MediaEnded="Player_MediaEnded" 
        MediaOpened="Player_MediaOpened" 
        Style="{StaticResource PlayerStyle}" 
        PlaylistVisibility="Disabled" 
        LogLevel="Warning" 
        AutoHideControls="True" 
        AutoHideDelay="0:0:5" 
        AllowDoubleClickToggle="True" 
        RetryDuration="00:01:00" 
        RetryInterval="00:00:10" 
        BufferingTime="00:00:15" 
     /> 

</Grid> 

Файл: PlayerPage.xaml
Стиль компонента плеера:

<Grid x:Name="ControllerContainer" Height="40" Grid.Row="4" RenderTransformOrigin="0.5,0.5"> 
    <Grid.RenderTransform> 
     <CompositeTransform /> 
      </Grid.RenderTransform> 
       <Grid.Background> 
        <ImageBrush ImageSource="component/Images/grid_background_player.jpg" 
            AlignmentY="Top" /> 
         </Grid.Background> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="120" /> 
           <ColumnDefinition Width="Auto" /> 
           <ColumnDefinition /> 
           <ColumnDefinition Width="Auto" /> 
           <ColumnDefinition Width="Auto" /> 
           <ColumnDefinition Width="Auto" /> 
           <ColumnDefinition Width="Auto" /> 
          </Grid.ColumnDefinitions> 
          <Grid x:Name="playercontrols" Grid.Column="0" HorizontalAlignment="Left" Width="90"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
           </Grid.ColumnDefinitions> 
           <Grid Grid.Column="0"> 
            <Button x:Name="TbPlayElement" Click="TbPlayElement_Click" HorizontalAlignment="Left" Cursor="Hand" > 
               <Grid> 
                <Image Source="component/Resources/play.png" Stretch="Uniform" Height="16" Width="16" /> 
               </Grid> 
            </Button> 

Сейчас в моем коде за PlayerPage.cs, когда я нажимаю кнопку st op, я хочу изменить изображение кнопки воспроизведения.

private void TbStopElement_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 

    } 

Как я могу получить доступ к кнопке воспроизведения в коде?

+0

Bind источник изображения к свойству типа BitmapImage. –

ответ

2

Присоединить к Loaded события, чтобы сохранить ссылку изображения:

xaml:

<Image Source="component/Resources/play.png" Stretch="Uniform" Height="16" Width="16" 
     Loaded="ImageLoaded" /> 

фонового кода:

private Image imageReference; 
private void ImageLoaded(object sender, EventArgs e) 
{ 
    imageReference = sender as Image; 
} 

Затем, когда вы хотите изменить изображение:

private void TbStopElement_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    if(imageReference != null) 
    { 
     imageReference.Source = new BitmapImage(new Uri("/YourAppName;component/Resources/YourImage.png", UriKind.Relative)); 
    } 
} 
+0

Yessss! это работает ! Спасибо вам: p – Flug

+2

Я бы поднял вас, если бы мог, но мне нужно 15 человек ... – Flug

1

Я предлагаю вам этот код

TbPlayElement.Source = new BitmapImage(new Uri("/TbPlayElement.content;component/NameNewImage.png", UriKind.Relative)); 

Примечание: Проверьте свойства в Visual Studio для файла XAML, убедитесь, что Build Action is set to Page.

Или вы можете использовать ToggleButton

ссылка: http://msdn.microsoft.com/en-us/library/cc296245%28v=vs.95%29.aspx

+0

Я протестировал этот код, но кнопка или изображение не распознаются визуальной студией, и я не могу достичь ее свойств, и поэтому у меня нет компиляции. – Flug

+0

это ваш контроль изображения для свойства, но для пути вы должны добавить файл изображения, убедитесь, что изображение находится в вашем репозитории –

+0

Я не уверен, что понимаю. Мои образы - это ресурсы для ставок, моя проблема в том, что я не могу воспользоваться этой кнопкой или изображением. – Flug

1

Доступ в вашем TbStopElement так:

 var grid = TbPlayElement.Content as Grid; 
     var playImage = grid.Children[0] as Image; 

     BitmapImage bitmap = new BitmapImage(); 
     bitmap.UriSource = new Uri("newImage.png", UriKind.Relative); 
     playImage.Source = bitmap; 
+0

Спасибо, я попробую вас код и bitmap.Beginit и bitmap.endInit не существует, и у меня нет доступа к PlayImage x: name. Это моя проблема. – Flug

+0

Извините, забыли, что это 'WPF' конкретный. Я уточню соответственно. Не могли бы вы попробовать без этих методов? –

+1

@Flug Когда вы говорите, у вас нет доступа к PlayImage x: Name, вы имели в виду, что у вас нет доступа к исходному коду? – sthotakura

Смежные вопросы