我正在尝试在按钮下显示弹出窗口。
这就是现在的样子:
但我希望它保持在窗口边界内,就像这样(油漆中的例子)
这是我在顶部声明弹出窗口的顶栏:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="55" />
<RowDefinition Height="35" />
</Grid.RowDefinitions>
<Grid x:Name="AdminContainer" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Border Background="Transparent">
<Viewbox StretchDirection="DownOnly" Stretch="Uniform" Height="35" HorizontalAlignment="Left" Margin="10,0,0,0">
<ContentControl Content="{StaticResource LynxLogo}" Margin="0,5" />
</Viewbox>
</Border>
<ToggleButton x:Name="AdminOptionsToggleButton"
Grid.Column="2"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
IsChecked="{Binding mainViewModel.OptionsPopupOpen, Mode=TwoWay}"
Style="{StaticResource EmptyToggleButtonStyle}"
Cursor="Hand">
<Grid x:Name="AdminPanel" HorizontalAlignment="Right" Height="45"
VerticalAlignment="Stretch" Margin="0,0,2,0" >
<Grid.Style>
<Style>
<Setter Property="Grid.Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton}, Path=IsMouseOver}" Value="True">
<Setter Property="Grid.Background" Value="#FF404040"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton}, Path=IsChecked}" Value="True">
<Setter Property="Grid.Background" Value="#FF353535"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="45" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Padding="20,0,0,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!--Name-->
<TextBlock Grid.Row="0" Text="{Binding adminViewModel.Name}"
Style="{StaticResource AdminTextBlockStyle}" VerticalAlignment="Bottom"
FontSize="16" />
<!--Status-->
<TextBlock Grid.Row="1" Text="{Binding adminViewModel.StatusDescription}"
Style="{StaticResource AdminTextBlockStyle}" VerticalAlignment="Bottom"
FontSize="13" Margin="0,0,0,1" />
</Grid>
</Border>
<Border Grid.Column="1" HorizontalAlignment="Right" Margin="3">
<Viewbox StretchDirection="DownOnly">
<Image x:Name="ProfilePicture" Source="/Image/ProfilePictures/profile_placeholder.png" />
</Viewbox>
</Border>
</Grid>
</ToggleButton>
</Grid>
<views:OptionPopup x:Name="OptionsMenu" PlacementTarget="{Binding ElementName=AdminPanel}"
Placement="Bottom"
MinWidth="{Binding ActualWidth, ElementName=AdminPanel}"
MaxWidth="{Binding ActualWidth, ElementName=AdminContainer}" />
答案 0 :(得分:3)
我通过设置自定义位置来修复它:
<views:OptionPopup x:Name="OptionsMenuPopup"
PlacementTarget="{Binding ElementName=AdminPanel}"
Placement="Custom"
MinWidth="{Binding ActualWidth, ElementName=AdminPanel}"
MaxWidth="{Binding ActualWidth, ElementName=AdminContainer}" />
在我后面的代码中我的usercontrol的构造函数中添加了
OptionsMenuPopup.CustomPopupPlacementCallback += (Size popupSize, Size targetSize, Point offset) =>
new[] { new CustomPopupPlacement() { Point = new Point(targetSize.Width - popupSize.Width, targetSize.Height) } };
答案 1 :(得分:0)
您可以使用SystemParameters.PrimaryScreenHeight的组合和Popup的左上角来计算您有多少空间,并将其设置为Popup内容的MaxHeight和MaxWidth。