Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
假设我在标签旁边有一个简单的文本框: 我的标签 假设我在标签旁边有一个简单的文本框: <StackPanel> <StackPanel Orientation="Horizontal"> <Label Margin="3">MyLabel</Label> <TextBox Margin="3" Width="100">MyText</TextBox> </StackPanel> ... </StackPanel> 这会产生以下结果: 可以看到,MyLabel 和 MyText 的基线没有对齐,看起来很难看。当然,我可以开始调整边距,直到它们匹配,但由于这是一个常见的要求,我确信 WPF 提供了一个更简单、更优雅的解决方案,只是我还没有找到...... 我认为,这种行为是由于 TextBox 默认为 Stretch 的垂直对齐方式造成的,这导致它填充可用空间并在文本下方有额外的几个像素。如果你用这个代替: <StackPanel> <StackPanel Orientation="Horizontal"> <Label >MyLabel</Label> <TextBox VerticalAlignment="Center" Width="100">MyText</TextBox> </StackPanel> </StackPanel> ...您应该会看到更清晰的结果。 你觉得怎么样? <StackPanel Orientation="Horizontal"> <Label Margin="3" VerticalContentAlignment="Center">MyLabel</Label> <TextBox Margin="3" VerticalContentAlignment="Center" Width="100">MyText</TextBox> </StackPanel> 我在 Kaxaml 中实现了这种外观: <StackPanel Orientation="Horizontal"> <Label Margin="3" VerticalAlignment="Center">MyLabel</Label> <TextBox Margin="3" Width="100" VerticalAlignment="Center">MyText</TextBox> </StackPanel> 我知道这是一个旧的答案,但对于那些寻求另一种方式的人来说,这是一个示例,您不需要依赖固定的文本框宽度: 使用 DockPanel 和 .Dock 代替 StackPanel。 这在网格内使用时被证明非常方便。 <DockPanel Grid.Column="2" Grid.Row="2"> <Label Content="SomeTitle:" DockPanel.Dock="Left"></Label> <TextBox x:Name="SomeValueTextBox" VerticalAlignment="Center" DockPanel.Dock="Right"></TextBox> </DockPanel> 这个问题并不像看起来那么微不足道,并且接受的答案缺乏细节。如果您尝试使用控件自定义高度,您会发现问题。 首先,这是 User7116 回答的正确实现。 <StackPanel Orientation="Horizontal"> <Label Margin="3" VerticalAlignment="Center">MyLabel</Label> <TextBox Margin="3" Width="100" VerticalAlignment="Center">MyText</TextBox> </StackPanel> 棘手的部分是这里有两个级别的垂直对齐,因此请了解对齐的工作原理。 当我们为控件指定对齐方式时,我们是在告诉它如何在 parent 容器中定位自己(请参阅 documentation)。因此,当我们将 VerticalAlignment="Center"> 指定为 TextBox 时,我们告诉它该 TextBox 应在父级 stackpanel 中垂直居中显示。 现在该文本框内的实际文本也可以使用垂直对齐方式在该文本框内!这是第二级,实际上相当棘手,答案见here。 如果您尝试将上面标签的高度也设置为 50,您会发现它们不会再次对齐。这是因为标签现在占据了更大的区域,并且该区域内的文本没有垂直对齐,因此它看起来没有再次对齐。 上面的代码是: <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <Label Margin="3" VerticalAlignment="Center" Height="50">MyLabel</Label> <TextBox Margin="3" VerticalAlignment="Center" Width="50" Height="50">MyText</TextBox> </StackPanel> 幸运的是,当控件高度为默认值时(如标签控件),它的高度足以包含文本,因此内部对齐并不重要。但如果有人为这些控件设置自定义高度,它就会发挥作用,并且更好地理解它是如何工作的。 以下是您可以执行此操作的方法: <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="2"> <Label FontSize="20" Margin="3" FontWeight="Bold">Username :</Label> <TextBox Width="200" Margin="3" Height="40" Name="txtUsername" /> </StackPanel> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="2"> <Label FontSize="20" Margin="3" FontWeight="Bold">Password :</Label> <TextBox Width="200" Margin="3" Height="40" Name="txtPasswrod" /> </StackPanel>
我需要将字体选择器添加到我的 WPF 文本编辑器中。我正在调整这个字体选择器。 但是,它列出了所有已安装的字体。我只需要一个固定宽度(等宽)字体的列表。 我如何检查我...
Prism 6 WPF 创建shell问题覆盖onstartup类
如果我使用 prism 6,如何覆盖默认启动类或窗口。 我浏览了prism的官方文档,但找不到预期的答案。 我尝试导出应用程序 c...
我有我的实时图表笛卡尔->折线图,从文件/串行端口绘制 5 种不同类型的数据,但它们都在同一个系列上。 我显示了 2 个 Y 轴,但无法将数据添加到 eac...
我知道关于这个主题有一些答案,但我无法得到任何适合我的解决方案。我正在尝试从数据模板内触发的 ICommand 打开一个新窗口。两者都...
我正在开发一个WPF应用程序。在我的应用程序中,将有一个主窗口 (System.Windows.Window),在其顶部我将在页面 (System.Windows.Controls.Page) 之间导航。每当...
我正在尝试开发一个应用程序,该应用程序加载图像并根据用户使用鼠标定义的矩形对其进行裁剪。 我面临着与这篇文章中提到的同样的问题。一个...
我正在尝试将窗口放置在辅助显示屏的右上角。在 Window_Loaded 事件处理程序中,我有以下代码: private void Window_Loaded(对象发送者, RoutedEven...
我希望当值改变时数据网格的前景色为蓝色。因此,用户应该明白该值已经改变并且应该激活保存功能。 为此目的...
“confirmbtn_Click”的重载与委托“RoatedEventHandler”匹配
<Button x:Name="confirmbtn" Content="Register" HorizontalAlignment="Center" Height="60" Margin="0,286,0,0" VerticalAlignment="Top" Width="216" Click="confirmbtn_Click"/>t private void confirmbtn_Click(object sender, RoutedEventArgs e, MainWindow mainWindowInstance) { /// } 我试图在这里获取 MainWindow mainWindowInstance,但每次我将它放在某个地方时,我都会一遍又一遍地遇到相同的错误 每个事件都有唯一的签名,您无法更改它。要获取 mainWindow 的实例,您可以使用其他方式。例如,您可以使用以下代码: Window mainWindow = Application.Current.MainWindow; 通过此代码,您可以获得应用程序的主窗口。 foreach (Window window in Application.Current.Windows) { // } 或者您可以使用此代码获取该按钮的父窗口 private Window FindParentWindow(DependencyObject child) { DependencyObject parent= VisualTreeHelper.GetParent(child); //CHeck if this is the end of the tree if (parent == null) return null; Window parentWindow = parent as Window; if (parentWindow != null) { return parentWindow; } else { //use recursion until it reaches a Window return FindParentWindow(parent); } } private void confirmbtn_Click(object sender, RoutedEventArgs e) { Window mainWindow = FindParentWindow(sender as DependencyObject); } 或者您可能已经拥有它(如果此处理程序位于主窗口内)。
无法将匿名方法转换为类型“System.Delegate”,因为它不是委托类型
我想在 WPF 应用程序的主线程上执行此代码并收到错误,我无法弄清楚出了什么问题: 私有无效AddLog(字符串logItem) { this.Dispatcher.BeginInvoke(
WPF/VB 如何将三态复选框(或可为空布尔值)设置为 Nothing(null)
标题本身就说明了一切。对于 VB,关键字 Nothing 与 False 相同。 此代码验证复选框是否为三状态复选框,并设置默认值,不确定是否为“三状态...
DataGridCell IsReadOnly ControlTemplate 触发更改背景颜色 -
目标是当列的 IsReadOnly 设置为 false 时,为环绕边框分配适当的颜色(这使得 ControlTemplate 定位于 DataGridCell)。 <p>目标是当列 <pre><code>ControlTemplate</code></pre> 设置为 false 时,为环绕边框分配适当的颜色(这使得 <pre><code>DataGridCell</code></pre> 定位为 <pre><code>IsReadOnly</code></pre>)。</p> <pre><code><Style BasedOn="{StaticResource MaterialDesignDataGridCell}" TargetType="{x:Type DataGridCell}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridCell}"> <Border Margin="8" Background="{TemplateBinding Background}" CornerRadius="4"> <Grid> <ContentPresenter VerticalAlignment="Center" /> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsReadOnly" Value="False"> <Setter Property="Background" Value="{StaticResource SecondaryHueMidBrush}" /> <Setter Property="Foreground" Value="{StaticResource MaterialDesignDarkForeground}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </code></pre> <p>颜色分配正确 <a href="https://i.stack.imgur.com/kGFiE.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL2tHRmlFLnBuZw==" alt=""/></a></p> <p>但是,当选择某行然后光标离开提到的行时,指定的颜色就会消失,我只剩下默认的颜色。仅当该行仍处于选中状态时才会发生。</p> <p><a href="https://i.stack.imgur.com/dvEAD.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL2R2RUFELnBuZw==" alt=""/></a></p> <p>所考虑的列是唯一不是 <pre><code>ReadOnly</code></pre> 的列,按以下方式定义</p> <pre><code><DataGridTextColumn Binding="{Binding PreviousMonthResult, UpdateSourceTrigger=PropertyChanged}" EditingElementStyle="{StaticResource textCenterEditing}" ElementStyle="{StaticResource textCenter}"> <DataGridTextColumn.HeaderTemplate> <DataTemplate> <Border Padding="8" Background="{StaticResource SecondaryHueMidBrush}" CornerRadius="8"> <TextBlock Foreground="{StaticResource MaterialDesignDarkForeground}" Text="{Binding DataContext.DateHeaders[PreviousMonth], RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> </Border> </DataTemplate> </DataGridTextColumn.HeaderTemplate> </DataGridTextColumn> <DataGridTextColumn Binding="{Binding CurrentMonthResult, UpdateSourceTrigger=PropertyChanged}" EditingElementStyle="{StaticResource textCenterEditing}" ElementStyle="{StaticResource textCenter}"> <DataGridTextColumn.HeaderTemplate> <DataTemplate> <Border Padding="8" Background="{StaticResource SecondaryHueMidBrush}" CornerRadius="8"> <TextBlock Foreground="{StaticResource MaterialDesignDarkForeground}" Text="{Binding DataContext.DateHeaders[CurrentMonth], RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> </Border> </DataTemplate> </DataGridTextColumn.HeaderTemplate> </DataGridTextColumn> </code></pre> <p>哪里<pre><code>textCenterEditing</code></pre>和<pre><code>textCenter</code></pre></p> <pre><code><Style BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}" TargetType="DataGridColumnHeader"> <Setter Property="HorizontalContentAlignment" Value="Center" /> </Style> <Style x:Key="textCenter" TargetType="{x:Type TextBlock}"> <Setter Property="TextAlignment" Value="Center" /> </Style> <Style x:Key="textCenterEditing" BasedOn="{StaticResource MaterialDesignTextBox}" TargetType="{x:Type TextBox}"> <Setter Property="TextAlignment" Value="Center" /> </Style> </code></pre> <p>但是我想这些“小”样式不应该妨碍实现预期的结果</p> </question> <answer tick="false" vote="0"> <p>您正在使用一些材料设计样式,这可能会很复杂,不确定。</p> <p>问题是由于所选画笔在行级别应用造成的。</p> <p>如果您不介意突出显示所选行背景,则可以将其设置为透明。</p> <p>大致:</p> <pre><code><DataGrid.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent"/> </DataGrid.Resources> </code></pre> <p>您可能想使用前景画笔来表示选择。</p> <p>可能有更优雅的面向材料设计的解决方案。</p> </answer> </body></html>
我想将排序命令绑定到DataGridColumn.Header,如果它绑定到按钮,则该函数可以工作,但我想无论如何在数据网格的列标题中实现它。我使用 MVVMCross 作为...
c# wpf 如何预览附件(word,pdf) 不使用office online, Microsoft.Office.Interop
我想在我的wpf应用程序中预览附件 我无法使用网络,我在本地网络中使用此应用程序 我尝试了GemBox.Pdf、spire和aspose,有收费,谢谢3 我想先睹为快
如何在WebBrowser实例中的WPF和JavaScript之间进行通信?
我有一个带有嵌入式浏览器(WebBrowser)和一些 JavaScript 的 C#/WPF 应用程序。他们如何才能双向沟通?使用 URL 可行吗? JS->WPF:列表...
努力让 WPF 窗口显示在具有混合 DPI 显示器的辅助屏幕上。可在 .NET Framework 4.8 和 .NET Standard 2.0 中重现 设置: 主显示器:4K,250% 中学...
如何根据DataGrid行内复选框的状态选择/取消选择该行?
我正在开发一个 WPF 应用程序,其中有一个带有 DataGrid 的窗口。此 DataGrid 绑定到“Person”对象的集合。 “Person”对象有一个名为“
我正在对上述问题进行故障排除,但找不到任何提示。 我有一个干净的 VS2022,没有扩展,并且几乎具有我相信的所有标准设置。 我有两个项目的一个解决方案,不是很完整...