在我看来,弹出量的计算不正确。
<AppBarButton>
<AppBarButton.Flyout>
<Flyout>
<ListView>
<x:String>Short</x:String>
<x:String>Very very very long</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
</ListView>
</Flyout>
</AppBarButton.Flyout>
</AppBarButton>
如果窗口的高度足够大-一切都很好。 但是,如果不是这样-弹出宽度是根据第一个元素(不是最大元素)计算的,我看到以下内容:
如何从代码(或XAML)更改Flyout的宽度?
编辑:
以下代码有效:
auto w = filesListView->ActualWidth.ToString();
Windows::UI::Xaml::Style^ s = ref new Windows::UI::Xaml::Style();
s->Setters->Append(ref new Setter(MinWidthProperty, w));
myFlyout->FlyoutPresenterStyle = s;
我试图将其放入Flyout.Opening(),Flyout.Opened(),ListView.SizeChanged(),ListView.Loaded(),ListView.Loading(),ListView.LayoutUpdated()。问题是它从第二个调用开始起作用。在第一个调用弹出按钮中,仍使用错误的宽度进行渲染。
答案 0 :(得分:1)
您可以更改ListView宽度以更改弹出窗口宽度
APPROACH 1
我将所有代码都放在了github上,欢迎您访问
另一种方法是设置FlyoutPresenterStyle
<AppBarButton Margin="10,10,10,10">
<AppBarButton.Flyout>
<Flyout>
<ListView Width="500">
<x:String>Short</x:String>
<x:String>Very very very long</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
</ListView>
</Flyout>
</AppBarButton.Flyout>
</AppBarButton>
请参见https://stackoverflow.com/a/54902492/6116637
我还将所有代码都放在github上,欢迎访问。
答案 1 :(得分:1)
我设法通过将弹出控件最初附加到另一个元素并覆盖Flyout.Opened()来更改弹出控件的大小,在此处计算出正确的宽度并将弹出控件附加到正确的元素上。
XAML代码:
<Page.Resources>
<Flyout x:Name="myFlyout" Opened="myFlyoutOpened">
<ListView x:Name="filesListView">
<x:String>Short</x:String>
<x:String>Very very very long</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
<x:String>Short</x:String>
</ListView>
</Flyout>
</Page.Resources>
<StackPanel>
<AppBarButton x:Name="myButton" Click="MyButton_Click"/>
<AppBarButton x:Name="SecondButton"/>
</StackPanel>
C ++代码:
void App4::MainPage::MyButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
auto flyout = static_cast<Flyout^>(Resources->Lookup(L"myFlyout"));
flyout->ShowAt(SecondButton);
}
void App4::MainPage::myFlyoutOpened(Platform::Object^ sender, Platform::Object^ e)
{
auto w = filesListView->ActualWidth.ToString();
Windows::UI::Xaml::Style^ s = ref new Windows::UI::Xaml::Style();
s->Setters->Append(ref new Setter(MinWidthProperty, w));
myFlyout->FlyoutPresenterStyle = s;
myFlyout->ShowAt(myButton);
}
答案 2 :(得分:0)
我找到了另一种解决方案:足以填充ListView的MaxHeight属性:
void App4::MainPage::MyButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
filesListView->MaxHeight = Window::Current->Content->ActualSize.y - 50;
auto flyout = static_cast<Flyout^>(Resources->Lookup(L"myFlyout"));
flyout->ShowAt(SecondButton);
}