UWP 中是否提供拆分器控件?

Is splitter control available in UWP?

我想在 UWP 项目中使用拆分器控件。但是我在UWP 平台找不到splitter 控件。 UWP 中还有其他拆分器控件吗?

不存在分离器,因为它自身不存在。

但是你可以在这里找到 Splitter 一个在 uwp 中制作的教程。

代码来自 Link:

XAML:

<Border x:Name="padResize_NavBar" Grid.Row="1" Grid.Column="0" Height="50" Width="50" HorizontalAlignment="Left" VerticalAlignment="Center" Background="LightGray" IsHitTestVisible="True" Opacity="0.5"
Margin="-25,0,0,0"
PointerPressed="padResize_NavBar_PointerPressed"
PointerEntered="padResize_NavBar_PointerEntered" PointerExited="padResize_NavBar_PointerExited" CornerRadius="25" RequestedTheme="Dark">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" >&lt; &gt;</TextBlock>
</Border>

C#:

#region [Resizing]
//========================< Region: [Resizing] >========================
#region Resizing_Globals
//========================< Resizing_Globals >========================


double ptrPoint_Offset_X = 0;

//private void fl_Check_Resizing_Exit(object sender, PointerRoutedEventArgs e)
//{
// //----------------< fl_Check_Resizing_Exit() >----------------
// if (is_Resizing_Thumbnails == true)
// { fl_Resizing_Stop(); }
// //----------------</ fl_Check_Resizing_Exit() >----------------
//}


//========================</ Resizing_Globals >========================
#endregion

#region Resize Thumbnails
//========================< Resize_Thumbnails >========================
bool is_Resizing_Thumbnails = false;
private void padResize_Thumbnails_PointerEntered(object sender, PointerRoutedEventArgs e)
{
//----------------< btnGridSplitter_ColumnResize_PointerEntered() >----------------
//Color on
padResize_Thumbnails.Opacity = 1;
//----------------</ btnGridSplitter_ColumnResize_PointerEntered() >----------------
}
private void padResize_Thumbnails_PointerPressed(object sender, PointerRoutedEventArgs e)
{
//----------------< btnGridSplitter_ColumnResize_PointerPressed() >----------------
//set StartFlag
if (is_Resizing_Thumbnails == false)
{
//*start only once. Pressed is called every time
is_Resizing_Thumbnails = true;
ptrPoint_Offset_X = e.GetCurrentPoint(padResize_Thumbnails).Position.X;
}
// ----------------</ btnGridSplitter_ColumnResize_PointerPressed() > ----------------
}
private void padResize_Thumbnails_PointerMoved(object sender, PointerRoutedEventArgs e)
{
//----------------< btnGridSplitter_ColumnResize_PointerMoved() >----------------
if (is_Resizing_Thumbnails == true)
{
//< Get Pointer and Point >
Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;
Windows.UI.Input.PointerPoint ptrPoint = e.GetCurrentPoint(GridShow);
Windows.UI.Input.PointerPoint ptrPoint_Offset = e.GetCurrentPoint(padResize_Thumbnails);
//</ Get Pointer and Point >

//--< check if Mouse is released >--
//--< Check Mouse >--
if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
{
//-< check left mouse >-
if (ptrPoint.Properties.IsLeftButtonPressed == false)
{
//< released >
//*if release then stop resizing
fl_Resizing_Thumbnails_Stop();
return;
//</ released>
}
//-</ check left mouse click >-
}
//--< check mouse click >--
//--</ check if mouse is released >--

//< get Point >
//*relativ to GridShow
double posX = ptrPoint.Position.X - ptrPoint_Offset_X;
if (posX < 0) posX = 0;
//</ get Point >

//-< set Column-With >-
colThumbnails.Width = new GridLength(posX);
//-</ set Column-With >-

tbxStatus.Text = "ptrPoint.Position=" + ptrPoint.Position.X + " Offset=" + ptrPoint_Offset_X;
}
//----------------</ btnGridSplitter_ColumnResize_PointerMoved() >----------------
}
private void padResize_Thumbnails_PointerExited(object sender, PointerRoutedEventArgs e)
{
//----------------< btnGridSplitter_ColumnResize_PointerExited() >----------------
//Color off
padResize_Thumbnails.Opacity = 0.3;
//----------------</ btnGridSplitter_ColumnResize_PointerExited() >----------------
}


private void fl_Resizing_Thumbnails_Stop(object sender, PointerRoutedEventArgs e)
{
//----------------< fl_Resizing_Column_Stop() >----------------
//*event from XAML
fl_Resizing_Thumbnails_Stop();
//----------------</ fl_Resizing_Column_Stop() >----------------
}
private void fl_Resizing_Thumbnails_Stop()
{
//< marker on >
is_Resizing_Thumbnails = false;
//</ marker off >

//< Setting save>
Windows.Storage.ApplicationData.Current.LocalSettings.Values["actColumn_Thumbnails"] = colNavBar.ActualWidth;
//</ Setting save>
//----------------</ fl_Resizing_Column_Stop() >----------------
}
//========================</ Resize Thumbnails >========================
#endregion

#region Resize Navbar
//========================< Resize_NavBar >========================
bool is_Resizing_NavBar = false;
private void padResize_NavBar_PointerEntered(object sender, PointerRoutedEventArgs e)
{
//----------------< padResize_NavBar_PointerEntered() >----------------
//Color on
padResize_NavBar.Opacity = 1;
//----------------</ padResize_NavBar_PointerEntered() >----------------
}
private void padResize_NavBar_PointerPressed(object sender, PointerRoutedEventArgs e)
{
//----------------< padResize_NavBar_PointerPressed() >----------------
//set StartFlag
if (is_Resizing_NavBar == false)
{
//*start only once pressed is called every time
is_Resizing_NavBar = true;
ptrPoint_Offset_X = e.GetCurrentPoint(padResize_NavBar).Position.X;
}
// ----------------</ padResize_NavBar_PointerPressed() > ----------------
}
private void padResize_NavBar_PointerMoved(object sender, PointerRoutedEventArgs e)
{
//----------------< padResize_NavBar_PointerMoved() >----------------
if (is_Resizing_NavBar == true)
{
//< Pointer and Point check>
Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;
Windows.UI.Input.PointerPoint ptrPoint = e.GetCurrentPoint(BaseGrid);
Windows.UI.Input.PointerPoint ptrPoint_Offset = e.GetCurrentPoint(padResize_NavBar);
//</ Pointer and Point check>

//--< check mouse released >--
//--< Mouse Click check>--
if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
{
//-< check left mouseclick >-
if (ptrPoint.Properties.IsLeftButtonPressed == false)
{
//< released>
//*if relesed stop resicing
fl_Resizing_NavBar_Stop();
return;
//</ released>
}
//-</ check left mouse >-
}
//--< Mouse click check >--
//--</ check if mouse is released >--

//< get Point >
//*relativ to GridShow
double posX = ptrPoint.Position.X - ptrPoint_Offset_X;
if (posX < 10) posX = 10;
//</ get Point >

//-< set Column-With >-
colNavBar.Width = new GridLength(posX);
//-</ set Column-With >-

tbxStatus.Text = "ptrPoint.Position=" + ptrPoint.Position.X + " Offset=" + ptrPoint_Offset_X;
}
//----------------</ btnGridSplitter_ColumnResize_PointerMoved() >----------------
}
private void padResize_NavBar_PointerExited(object sender, PointerRoutedEventArgs e)
{
//----------------< padResize_NavBar_PointerExited() >----------------
//Farbe ausschalten
padResize_NavBar.Opacity = 0.3;
//----------------</ padResize_NavBar_PointerExited() >----------------
}
private void fl_Resizing_NavBar_Stop(object sender, PointerRoutedEventArgs e)
{
fl_Resizing_NavBar_Stop();
}
private void fl_Resizing_NavBar_Stop()
{
//< marker off >
is_Resizing_NavBar = false;
//</ marker off >

//< Setting save>
Windows.Storage.ApplicationData.Current.LocalSettings.Values["actColumn_NavBar"] = colNavBar.ActualWidth;
//</ Setting speichern >
//----------------</ fl_Resizing_Column_Stop() >----------------
}






//========================</ Resize_NavBar >========================
#endregion
//========================</ Region: [Resizing] >========================
#endregion 

Microsoft 开发社区编写了网格拆分器并且是 Microsoft.Toolkit.UWP.UI.Controls 的一部分。截止到今天,这个控件还没有被添加到 nugget 包中,最终它将是...

https://github.com/Microsoft/UWPCommunityToolkit

还有一点需要注意,Grid Splitter 控件仅适用于 windows 10 周年更新及更高版本。