据我所知,ContentDialog
的默认行为应该是让它以PC为中心并在移动设备上与顶部对齐,但在我的情况下,即使在PC上也让它与顶部对齐,我不会了解发生了什么。
我正在使用代码隐藏创建它,这是我正在使用的代码片段:
// Creates the password box
var passwordBox = new PasswordBox {IsPasswordRevealButtonEnabled = true, Margin = new Thickness(5)};
// Creates the StackPanel with the content
var contentPanel = new StackPanel();
contentPanel.Children.Add(new TextBlock
{
Text = "Insert your password to access the application",
Margin = new Thickness(5),
TextWrapping = TextWrapping.WrapWholeWords
});
contentPanel.Children.Add(passwordBox);
// Creates the password dialog
_passwordDialog = new ContentDialog
{
PrimaryButtonText = "accept",
IsPrimaryButtonEnabled = false,
SecondaryButtonText = "exit",
Title = "Authentication",
Content = contentPanel
};
// Report that the dialog has been opened to avoid overlapping
_passwordDialog.Opened += (s, e) =>
{
// HACK - opacity set to 0 to avoid seeing behind dialog
Window.Current.Content.Opacity = 0;
_canShowPasswordDialog = false;
};
// Report that the dialog has been closed to enable it again
_passwordDialog.Closed += (s, e) =>
{
// HACK - opacity set to 1 to reset the window to original options
Window.Current.Content.Opacity = 1;
_canShowPasswordDialog = true;
};
// Clear inserted password for next logins
_passwordDialog.PrimaryButtonClick += (s, e) =>
{
// ... login ...
};
// Close the app if the user doesn't insert the password
_passwordDialog.SecondaryButtonClick += (s, e) => { BootStrapper.Current.Exit(); };
// Set the binding to enable/disable the accept button
_passwordDialog.SetBinding(ContentDialog.IsPrimaryButtonEnabledProperty, new Binding
{
Source = passwordBox,
Path = new PropertyPath("Password"),
Mode = BindingMode.OneWay,
Converter = new PasswordValidatorConverter()
});
我已尝试使用VerticalAlignment
和FullSizeDesired
,但我没有得到预期的结果。
我该如何解决这个问题?
答案 0 :(得分:3)
<table class="easyui-datagrid" id="dg" title="Raport Nilai " style="width:auto;height:250px"
toolbar="#toolbar" data-options="rownumbers:true,singleSelect:true">
<thead>
<tr>
<th data-options="field:'',width:100" rowspan="2">NRIC</th>
<th data-options="field:'',width:150" rowspan="2">Nama Siswa</th>
<th colspan="<?php echo count($hasil); ?>" width="200" >Nilai UTS</th>
<th data-options="field:'ss',width:100" align="center" rowspan="2">JML</th>
<th data-options="field:'ss',width:100" align="center" rowspan="2">RT</th>
</tr>
<tr>
<?php foreach ($hasil as $item):?>
<th data-options="field:'listprice',width:80,align:'center'">
<?php echo $item->kodemapel?>
</th>
<?php endforeach; ?>
</tr>
<tr>
<th field="NRIC" width="100" align="center"></th>
<th field="NAME" width="150" align="center"></th>
<?php foreach ($hasil as $item):?>
<th id="nilai" field="<?php echo "$item->kodemapel"; ?>" align="center"></th>
<?php endforeach; ?>
<th field="JML" width="50" align="center" data-options =" "></th>
<th field="RT" width="50" align="center" data-options ="formatter:function(value,row,index){return ratarata(row);}"></th>
</tr>
</thead>
</table>
与ContentDialog
控件类似,Popup
在页面上显示时保持它。但与PopupRoot
控件不同,放置Popup
的位置会写在后面的代码中,并且此属性不会向我们公开,我们无法更改它。
据我所知,ContentDialog的默认行为应该是让它以PC为中心。
ContentDialog
并非始终以PC为中心。我根据您发布的代码测试ContentDialog
个基础。当页面高度小于640时,ContentDialog
与页面顶部对齐。当页面高度等于640或大于640时,它位于页面的中心。
从上图中我们可以看到ContentDialog
的位置由ContentDialog
的高度触发。
答案 1 :(得分:0)
以下是:
将您的内容对话框实例化为应用程序布局的一部分,例如在App类中添加类似内容:
private Grid RootGrid => (Grid)Window.Current.Content;
private Frame Frame => this.RootGrid?.Children[0] as Frame;
private ContentDialog ContentDialog => this.RootGrid?.Children[1] as ContentDialog;
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
if (Window.Current.Content == null) {
Window.Current.Content = new Grid();
Debug.Assert( this.RootGrid != null);
this.RootGrid.Children.Add(new Frame());
this.RootGrid.Children.Add(new ContentDialog());
Debug.Assert(this.Frame != null && this.ContentDialog != null);
}
...
Window.Current.Activate();
}
将内容对话框的HorizontalAlignment,VerticalAlignment,MaxWidth和MaxHeight保留为默认值,以使对话框的“模态背景”覆盖应用的整个区域。
P.S。有关确保一次只显示一个内容对话框的提示,请参阅"Only a single ContentDialog can be open at any time." error while opening another contentdialog
答案 2 :(得分:0)
我不知道这里的来龙去脉,但这似乎是设置对话框的MaxWidth或MaxHeight引起问题的原因。
我将Maxwidth设置为500,并且对话框最终显示在屏幕左侧。我将MaxWidth更改为600,对话框仍然位于左侧,但距离目前还不太远。
然后我删除了MaxWidth,对话框又回到了屏幕中央。
大概是通过某种叠加层创建对话框,该叠加层需要为全屏尺寸才能正确对齐对话框。设置MaxWidth或MaxHeight时,它设置 overlay 的宽度/高度,而不是对话框本身。因此,如果这些值小于您的实际屏幕尺寸,则覆盖图位于屏幕的一侧(朝着上,左手边),而对话框位于覆盖图的中间。
删除MaxWidth为我解决了这个问题。
要获得所需的宽度,不要在对话框本身上设置MaxWidth,而应在告诉对话框保留的内容上设置MaxWidth。
刚刚仔细地看了其他答案,我注意到sjb-sjb也暗示了这一点。我不明白他的答案中所有其他代码是做什么的。只需删除MaxWidth / Height即可解决此问题。