C# UWP将孩子移动到其他家长问题
首先,我是UWP的新手,我已经在几乎所有地方(使用Google和Stackoverflow)搜索过答案,但找不到我问题的答案 因此,问题是: 我计划使用Visual Studio 2017和Target Sdk:Creators Update为UWP创建一个像素绘制应用程序,该应用程序具有Edge(利用标题栏)等选项卡功能 当应用程序处于全屏状态时,我想将我制作的自定义标题栏移动到内容视图 我想从这里开始(windows标题栏,这只是按钮XAML代码,我不包括选项卡栏XAML代码,因为这是一个商业项目): 下面是我的实用程序RemoveChild代码:C# UWP将孩子移动到其他家长问题,c#,xaml,uwp,parent-child,uwp-xaml,C#,Xaml,Uwp,Parent Child,Uwp Xaml,首先,我是UWP的新手,我已经在几乎所有地方(使用Google和Stackoverflow)搜索过答案,但找不到我问题的答案 因此,问题是: 我计划使用Visual Studio 2017和Target Sdk:Creators Update为UWP创建一个像素绘制应用程序,该应用程序具有Edge(利用标题栏)等选项卡功能 当应用程序处于全屏状态时,我想将我制作的自定义标题栏移动到内容视图 我想从这里开始(windows标题栏,这只是按钮XAML代码,我不包括选项卡栏XAML代码,因为这是一个商
public static void RemoveChild(DependencyObject parent, UIElement child)
{
var parentAsPanel = VisualTreeHelper.GetParent(child);
if (parentAsPanel != null)
{
parentAsPanel.Children.Remove(child);
return;
}
var parentAsContentPresenter = parent as ContentPresenter;
if (parentAsContentPresenter != null)
{
if (parentAsContentPresenter.Content == child)
{
parentAsContentPresenter.Content = null;
}
return;
}
var parentAsContentControl = parent as ContentControl;
if (parentAsContentControl != null)
{
if (parentAsContentControl.Content == child)
{
parentAsContentControl.Content = null;
}
return;
}
}
这是我的应用程序在进入全屏模式之前的样子:
所以问题是,每当应用程序进入全屏模式时,子应用程序确实会移动到新的父应用程序,但按钮不在那里,只有网格的背景色剩余,我无法单击其中任何一个(不是单击事件),请看:
当我切换回非全屏视图时,新选项卡上的程序条加载未显示。
我不知道我做的哪一个是错误的XAML或C代码
任何帮助都将不胜感激
p.S.我是印尼人,所以我的句子可能有问题,希望你明白我在说什么。你的代码片段有问题。例如,
RemoveChild
方法有两个参数,但在调用它时只提供一个参数。如果不指定parentAsPanel
变量类型,则无法获取Children
属性
由于代码未完成,在更新代码并添加所需的其他代码后,我可以正确运行您的代码段,并且无法重现上述问题。以下是我完成的测试代码:
XAML
我的测试环境是OS build 15063。如果您仍然有问题,请提供最小的项目。你可以试着在我的测试演示中重现这个问题。更多详细信息请参考。抱歉,这是我的错误,我发布的上述代码实际上正在工作(只是一些错误复制的代码,例如实用程序代码上的参数是不必要的) false在其父级上,我忘记在第二位(btnPlace2)父级上添加行定义 现在它可以工作了,看起来很棒:) 以下是em的一些图片: 在全屏模式下: 感谢所有回答并投票支持这个问题的人 致以最良好的祝愿
andr33ww谢谢你的帮助,我明白了,我上面写的一些代码是错误的,但我在项目中的实际代码正在工作,所以这不是因为上面的任何参数或其他原因。我刚刚找到了罪魁祸首,这不是因为我在这里发布的任何代码,罪魁祸首实际上在我的btnplace2的父级上,我忘记放置行定义,所以下面的内容与上面的选项卡栏内容重叠。感谢您回答tho:)
<Grid x:Name="btnMenuPlace2" Grid.Column="0">
</Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
private void WindowSizeChanged(object sender, WindowSizeChangedEventArgs e)
{
var appView = ApplicationView.GetForCurrentView();
if (appView.IsFullScreenMode)
{
Utility.RemoveChild(btnMenuPlaceContent);
btnMenuPlace2.Children.Add(btnMenuPlaceContent);
Utility.RemoveChild(tabBarPlaceContent);
tabBarPlace2.Children.Add(tabBarPlaceContent);
}
else
{
Utility.RemoveChild(btnMenuPlaceContent);
btnMenuPlace1.Children.Add(btnMenuPlaceContent);
Utility.RemoveChild(tabBarPlaceContent);
tabBarPlace1.Children.Add(tabBarPlaceContent);
}
e.Handled = true;
}
public static void RemoveChild(DependencyObject parent, UIElement child)
{
var parentAsPanel = VisualTreeHelper.GetParent(child);
if (parentAsPanel != null)
{
parentAsPanel.Children.Remove(child);
return;
}
var parentAsContentPresenter = parent as ContentPresenter;
if (parentAsContentPresenter != null)
{
if (parentAsContentPresenter.Content == child)
{
parentAsContentPresenter.Content = null;
}
return;
}
var parentAsContentControl = parent as ContentControl;
if (parentAsContentControl != null)
{
if (parentAsContentControl.Content == child)
{
parentAsContentControl.Content = null;
}
return;
}
}
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<Grid x:Name="btnMenuPlace1" Grid.Column="0" Grid.Row="0">
<Grid x:Name="btnMenuPlaceContent" Background="{StaticResource SystemControlHighlightListAccentMediumBrush}">
<StackPanel Orientation="Horizontal">
<Button x:Name="btnMenu" FontFamily="Segoe MDL2 Assets" Content="" Width="50" Height="50" Background="Transparent" />
<!--<local:CustomTitleBar Width="200" Height="50"></local:CustomTitleBar>-->
</StackPanel>
</Grid>
</Grid>
<Grid x:Name="btnMenuPlace2" Grid.Column="1" Grid.Row="1"/>
<TextBlock Text="text" x:Name="txtresult"></TextBlock>
<Button x:Name="ToggleFullScreenModeButton" Margin="0,10,0,0" Click="ToggleFullScreenModeButton_Click">
<SymbolIcon x:Name="ToggleFullScreenModeSymbol" Symbol="FullScreen" />
</Button>
</StackPanel>
</Grid>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;
Window.Current.SetTitleBar(btnMenuPlace1);
Window.Current.SizeChanged += Current_SizeChanged;
}
private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
{
var appView = ApplicationView.GetForCurrentView();
if (appView.IsFullScreenMode)
{
RemoveChild(btnMenuPlace1, btnMenuPlaceContent);
btnMenuPlace2.Children.Add(btnMenuPlaceContent);
}
else
{
RemoveChild(btnMenuPlace2, btnMenuPlaceContent);
btnMenuPlace1.Children.Add(btnMenuPlaceContent);
}
e.Handled = true;
}
public void RemoveChild(DependencyObject parent, UIElement child)
{
Grid parentAsPanel = VisualTreeHelper.GetParent(child) as Grid;
if (parentAsPanel != null)
{
parentAsPanel.Children.Remove(child);
return;
}
var parentAsContentPresenter = parent as ContentPresenter;
if (parentAsContentPresenter != null)
{
if (parentAsContentPresenter.Content == child)
{
parentAsContentPresenter.Content = null;
}
return;
}
var parentAsContentControl = parent as ContentControl;
if (parentAsContentControl != null)
{
if (parentAsContentControl.Content == child)
{
parentAsContentControl.Content = null;
}
return;
}
}
private void ToggleFullScreenModeButton_Click(object sender, RoutedEventArgs e)
{
var view = ApplicationView.GetForCurrentView();
if (view.IsFullScreenMode)
{
view.ExitFullScreenMode();
}
else
{
if (view.TryEnterFullScreenMode())
{
txtresult.Text = "full screen";
}
else
{
txtresult.Text = "no full screen";
}
}
}
}