我已经有一段时间我正在尝试做类似的事情而且我现在要抛出一个NotImplementedException ...我的意思是,扔掉毛巾。你是我最后的希望。
所以,我的目标是:当用户点击它时出于用户友好的目的启用StackPanel。
我在这个禁用的StackPanel中有一些项目,它位于窗口内网格内的ScrollViewer内。
我的代码中有一部分需要理解:
<Grid x:Name="MainGrid">
<Grid.RowDefinitions>
<RowDefinition MinHeight="30" MaxHeight="30"/>
<RowDefinition MinHeight="22" MaxHeight="22"/>
<RowDefinition MinHeight="155" Height="155"/>
<RowDefinition MinHeight="130"/>
<RowDefinition MinHeight="25" MaxHeight="25"/>
<RowDefinition MinHeight="22" MaxHeight="22"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="355" Width="360" />
<ColumnDefinition MinWidth="330" />
<ColumnDefinition MinWidth="280" />
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Column="2" Grid.Row="3" VerticalScrollBarVisibility="Auto">
<StackPanel IsEnabled="False" IsEnabledChanged="ioStackPanel_IsEnabledChanged">
<Grid Height="22">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110"/>
<ColumnDefinition/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
</Grid>
</StackPanel>
</ScrollViewer>
</Grid>
我已经尝试了类似的东西:
<ScrollViewer Grid.Column="2" Grid.Row="3" VerticalScrollBarVisibility="Auto" MouseDown="ScrollViewer_MouseDown">
private void ScrollViewer_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Well done bro!");
}
但没有提出任何问题。没有显示MessageBox。
答案 0 :(得分:2)
以下代码正常运行,请关注它。
<Grid x:Name="MainGrid">
<Grid.RowDefinitions>
<RowDefinition MinHeight="30" MaxHeight="30" />
<RowDefinition MinHeight="22" MaxHeight="22" />
<RowDefinition Height="155" MinHeight="155" />
<RowDefinition MinHeight="130" />
<RowDefinition MinHeight="25" MaxHeight="25" />
<RowDefinition MinHeight="22" MaxHeight="22" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="360" MinWidth="355" />
<ColumnDefinition MinWidth="330" />
<ColumnDefinition MinWidth="280" />
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Row="3"
Grid.Column="2"
PreviewMouseLeftButtonDown="InnerPanel_PreviewMouseLeftButtonDown_1"
VerticalScrollBarVisibility="Auto">
<StackPanel Name="InnerPanel"
Background="Gray"
IsEnabled="False"
IsEnabledChanged="StackPanel_IsEnabledChanged_1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110" />
<ColumnDefinition />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="20" />
</Grid.ColumnDefinitions>
<Button Grid.Column="2" Content="Inner Panel" />
</Grid>
</StackPanel>
</ScrollViewer>
</Grid>
private void InnerPanel_PreviewMouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
{
}
这很好用,并在上面的事件中实现你的逻辑。
答案 1 :(得分:0)
不幸的是,当一个控件被禁用时,它会消耗它的所有事件并且什么都不做。
如何使用网格将其放在透明面板后面。当用户点击面板时,您隐藏面板并启用堆叠面板。
像...一样的东西。
<scrollviewer ...>
<grid> <!--New grid just to align the two panels-->
<stackpanel x:Name="enableMe" IsEnabled="False" ...>
....
</stackpanel>
<border x:name="hideMe" Background="Transparent" Click="EnableStackPanel" ZIndex="1"/>
</grid>
</stackpanel>
public void EnableStackPanel(...)
{
enableMe.IsEnabled=true;
hideMe.Visibilty = Visibility.Collapsed;
}