Я создаю приложение C # WPF.Я поместил Scrollviewer внутри ячейки сетки.Когда приложение запускается, и если я щелкаю где-нибудь внутри ячейки Scrollviewer, все кнопки панели инструментов, которые находятся в другой ячейке и управляются другим пользовательским элементом управления, внезапно отключаются и не включаются повторно.
Почему это происходит и как я могу это исправить?
Спасибо за любую помощь.
Вот мой код ScrollViewer:
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Grid.Column="1" Grid.Row="1">
<StackPanel x:Name="innerPanel" Grid.Column="1"
Grid.Row="1" Orientation="Vertical">
</StackPanel>
</ScrollViewer>
И мой код панели инструментов:
<ToolBarTray Grid.Row="1" Grid.ColumnSpan="2" Background="LightGray" >
<ToolBar x:Name="toolbar" Background="LightGray" ToolBarTray.IsLocked="False">
<Button Command="New" Content="New" />
<Button Command="Open" Content="Open" />
<Button Command="Save" Content="Save" />
<Button Command="Cut" Content="Cut" />
<Button Command="Copy" Content="Copy" />
<Button Command="Paste" Content="Paste" />
<Button Command="Record" Content="Record" />
<Button Command="Play" Content="Play" />
<Button Command="Pause" Content="Pause" />
<Button Command="Stop" Content="Stop" />
<Image Width="20" Margin="5,0" Source="C:\VolumeIcon1.png"/>
<Slider x:Name="VolumeControl" Maximum="100" Width="250"
TickPlacement="BottomRight" Foreground="DarkGray"
TickFrequency="1" IsSnapToTickEnabled="True"/>
<TextBox Text="{Binding ElementName=VolumeControl, Path=Value,
UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Right"
TextAlignment="Right" Width="30"
</ToolBar>
</ToolBarTray>
Вот некоторые изображения кнопок, когда они отключены и включены.
Редактировать. Эти четыре файла должны воспроизводить основную версию проблемы, с которой я столкнулся.При щелчке по области Scrollviewer новая кнопка на моей панели инструментов отключается и становится серой.
MainWindow.xaml
<Window x:Class="UIMilestone.MainWindow" x:Name="window"
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"
xmlns:local="clr-namespace:UIMilestone"
mc:Ignorable="d"
SizeChanged="OnWindowSizeChanged"
Title="MainWindow" Height="450" Width="800" Background="LightGray">
<Grid x:Name="mainGrid" ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="5"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition x:Name="row0" Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Grid.Column="1" Grid.Row="1">
</ScrollViewer>
</Grid>
MainWindow.xaml.cs
namespace UIMilestone
{
public partial class MainWindow : Window
{
//Links C# project to methods in c++
public MainWindow()
{
InitializeComponent();
mainGrid.Measure(new Size(800, 450));
mainGrid.Arrange(new Rect(0, 0, 800, 450));
TopToolbars tools = new TopToolbars(this);
mainGrid.Children.Add(tools);
}
protected void OnWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
}
}
}
TopToolBars.xaml
<UserControl x:Class="UIMilestone.TopToolbars"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:UIMilestone"
mc:Ignorable="d"
d:DesignHeight="47" d:DesignWidth="790">
<UserControl.CommandBindings>
<CommandBinding Command="New" CanExecute="New_CanExecute" />
</UserControl.CommandBindings>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="327.333"/>
<ColumnDefinition Width="462.667"/>
</Grid.ColumnDefinitions>
<ToolBar x:Name="toolbar" Background="LightGray" ToolBarTray.IsLocked="False">
<Button Command="New" Content="New" />
</ToolBar>
</Grid>
TopToolBars.xaml.cs
using System.Windows.Controls;
using System.Windows.Input;
namespace UIMilestone
{
public partial class TopToolbars : UserControl
{
private MainWindow win;
public TopToolbars(MainWindow mainWindowInst)
{
win = mainWindowInst;
InitializeComponent();
this.SetValue(Grid.RowProperty, 0);
this.SetValue(Grid.ColumnProperty, 1);
}
private void New_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
}
}