我有一個與視覺刷(通過VLC.DotNet鏈接到一個VLC播放器)和一個選項卡控件的組合奇怪的經驗。我使用VLC播放器創建了一個自定義控件來觀看RTSP流,並在給定窗口中擁有多個這些控件。VisualBrush(鏈接到VLC)不改變TabControl選擇變化
問題是,如果我把所有的控件放在列表視圖中,它們都會正常顯示。但是,如果我將它們放在一個選項卡控件中,那麼它總是顯示第一個選定選項卡項目的流,不管我目前在使用哪個選項卡。控件中的其他所有內容(標籤等)都會正確更改,但不是由可視化筆刷繪製的部分。
我控制視圖定義爲:
<UserControl x:Class="myApp.View.CameraMonitorView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Wpf="clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"
Loaded="UserControl_Loaded">
<DockPanel>
<Label Content="{Binding Name}" DockPanel.Dock="Bottom"/>
<Grid Margin="3">
<Grid.Background>
<VisualBrush Stretch="Uniform">
<VisualBrush.Visual>
<Image Source="{Binding VideoSource, ElementName=vlcControl}"/>
<!--<Image Source="{Binding Image}" /> -->
</VisualBrush.Visual>
</VisualBrush>
</Grid.Background>
<Wpf:VlcControl x:Name="vlcControl" Margin="3"/>
</Grid>
</DockPanel>
</UserControl>
的觀點背後的代碼開始播放RTSP,但我不認爲代碼將有助於解決這個問題。
同時視圖模型(剝離下來,便於觀看的)就是:
class CameraMonitorViewModel : ViewModelBase
{
public CameraMonitorViewModel(string name, string image)
{
Name = name;
Image = image;
}
public string Name {get; set;}
public string Image { get; set; }
}
而且我有一個數據模板中定義爲:
<DataTemplate DataType="{x:Type vm:CameraMonitorViewModel}">
<v:CameraMonitorView HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</DataTemplate>
完整的窗口視圖模型稱爲一個ObservableCollection顯示器和視圖顯示:
<TabControl ItemsSource="{Binding Monitors}" SelectedIndex="0" Height="300">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Name}"/>
<Setter Property="Content" Value="{Binding}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
<ListView ItemsSource="{Binding Monitors}" Height="300" />
ListView正確顯示來自每臺相機的不同圖像。該標籤項目將始終顯示相同的相機,但是當我點擊不同的標籤時,控件的標籤項目會發生變化。此外,如果我將VCL控件的數據綁定替換爲註釋掉的靜態圖像對象(其源代碼是通過視圖模型設置的),那麼當我單擊不同的選項卡時,圖像會正確更改。
我真的很困惑,並希望可以提供任何幫助。
嘗試刪除'SelectedIndex =「0」' – 2014-10-01 21:58:56
@ h.alex沒有運氣。刪除該行意味着最初沒有選擇任何選項卡。一旦我選擇了一個,該攝像機的視圖就會「卡住」,成爲唯一顯示的視圖。 – Colin 2014-10-01 22:09:44
哎呀。一旦加載父用戶控件,我就開始播放VLC控件。我只是檢查,只有一個控件從選項卡控件加載(只有當我點擊一個選項卡,如果我沒有選定的索引)。所以我完全錯過了這個問題。感謝h.alex幫我找到了這個>< – Colin 2014-10-01 22:16:21