gpt4 book ai didi

c# - VisualBrush(链接到 VLC)在 TabControl 选择更改时不会更改

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:13 24 4
gpt4 key购买 nike

我对视觉画笔(通过 VLC.DotNet 链接到 VLC 播放器)和选项卡控件的组合有一种奇怪的体验。我已经使用 VLC 播放器创建了一个自定义控件来观看 RTSP 流,并且在给定窗口中有多个这样的控件。

问题是,如果我将所有控件放在 ListView 中,它们都会正确显示。但是,如果我将它们放在一个选项卡控件中,那么它总是显示第一个选择的选项卡项的流,无论我当前在哪个选项卡上。控件中的其他所有内容(标签等)都会正确更改,但视觉画笔绘制的部分不会。

我的控件的 View 定义为:

<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>

View 背后的代码开始播放 RTSP,但我认为该代码无助于解决此问题。

同时,ViewModel(为了便于查看而被剥离)只是:

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>

全窗口 View 模型有一个名为 Monitors 的 ObservableCollection, View 显示:

<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 正确地显示来自每个摄像头的不同图像。选项卡项将始终显示相同的相机,但当我单击不同的选项卡时,控件的标签项会发生变化。此外,如果我将 VLC 控件图像的数据绑定(bind)替换为注释掉的静态图像对象(其源通过 View 模型设置),那么当我单击不同的选项卡时图像将正确更改。

我真的很困惑,如果能提供任何帮助,我将不胜感激。

最佳答案

是的,正如我在对该问题的评论中指出的那样,问题在于我是根据控件的 Loaded 事件开始播放流。但它似乎在第二个选项卡之后没有被解雇,可能是因为 Rachel 在这里提到的:Loaded event doesn't fire for the 4th TabControl tab (因为它重用了模板而不是加载多个模板)。

关于c# - VisualBrush(链接到 VLC)在 TabControl 选择更改时不会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com