创建一个相对简单的数据输入表单,只想用水平线(与HTML中的HR标记不同)将某些部分分开,这些部分会拉伸表单的全长.
我试过这个:
<Line Stretch="Fill" Stroke="Black" X2="1"/>
Run Code Online (Sandbox Code Playgroud)
由于父控件不是固定宽度,因此该行会使窗口拉伸到屏幕的整个宽度.
有没有一种简单的方法可以在不修复父控件/窗口宽度的情况下执行此操作?
说我想要一个TextBlock
有它Width
等于它的父容器的Width
(即从一侧伸展到另一侧)或它的一个百分比的父容器Width
,我怎么能做到这一点XAML
,而无需指定绝对值?
我想这样做,以便如果稍后展开父容器容器(它的' Width
增加),它的'子元素也将自动扩展.(基本上,就像在HTML和CSS中一样)
在我的WPF应用程序中,我有一个包含几个控件的Stackpanel.如何将滚动条添加到此堆栈面板.
我有一个宽度为"1*"的网格.所以我认为在运行时确定实际宽度.在该网格中,我有另一个网格,其宽度我想设置为父网格的运行时宽度.我怎么能通过绑定在xaml中做到这一点.
这应该是这么简单 - 我一直在我的桌子上长时间试图让一个看似简单的任务工作(让我觉得WPF不直观或有缺陷)......
在任何情况下,我都有一个设置为水平方向的Stackpanel.在里面我有两个TextBlocks.我希望第二个在右边显示它的文本.
我该如何完成它?
这一切让我想起了为什么我离开了Silverlight.:p
Width
通过设置为 来使三列具有相同的宽度Auto
。
<Grid x:Name="myGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0">One</Label>
<Label Grid.Row="0" Grid.Column="1" x:Name="label1">Two</Label>
<Label Grid.Row="0" Grid.Column="2">Three</Label>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我想实现的是,如果中间列折叠或隐藏,则其他两列占用剩余空间并获得相同的宽度。
如果我只是因为宽度=“*”而将可见性设置为折叠或隐藏,则其他两列宽度保持不变。
<Label Grid.Row="0" Grid.Column="1" Visibility="Collapsed">Two</Label>
Run Code Online (Sandbox Code Playgroud)
我通过以编程方式将第二列宽度设置为自动来实现所需的功能,但我正在寻找其他一些解决方案(最好是 xaml 方式一)。
private void Button_Click(object sender, RoutedEventArgs e)
{
this.myGrid.ColumnDefinitions[1].Width = GridLength.Auto;
this.label1.Visibility = Visibility.Collapsed;
}
Run Code Online (Sandbox Code Playgroud) 当我单击图像时,它显示了菜单,但未显示图标。我尝试了两种方式:
为上下文菜单项设置图标的方法是什么?
Xml:
<Image Height="20" Width="20" Source="/CitiCall.WinClient;component/Images/user_icon.png" MouseDown="image1_MouseDown" Margin="0,0,4,6" HorizontalAlignment="Right" Name="image1" Stretch="Fill" VerticalAlignment="Top">
<Image.ContextMenu>
<ContextMenu>
<MenuItem Header="Reset password" Icon="/CitiCall.WinClient;component/Images/reset.png"/>
<!--<MenuItem.Icon>
<Image Source="/CitiCall.WinClient;component/Images/reset.png" ></Image>
</MenuItem.Icon>
</MenuItem>-->
<MenuItem Header="Edit Profile"/>
<MenuItem Header="Settings"/>
<MenuItem Header="About us"/>
</ContextMenu>
</Image.ContextMenu>
</Image>
Run Code Online (Sandbox Code Playgroud)
Xamal.cs:
private void image1_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
Image image = sender as Image;
ContextMenu contextMenu = image.ContextMenu;
contextMenu.PlacementTarget = image;
contextMenu.IsOpen = true;
}
}
Run Code Online (Sandbox Code Playgroud) 我TextBlock
在其中放了2个Inline
s Run
,HorizontalAlignment
TextBlock的设置为Center,这没关系,我只想将第一个Run比较到第二个,这是我的代码:
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="/Throne;component/Fonts/#Segoe UI Light" FontSize="35" FontWeight="Bold" Visibility="{Binding UserNameTextBlockVisibility}">
<Run FontSize="25">En tant que :</Run>
<LineBreak />
<Run Text="{Binding UserName}" Foreground="ForestGreen"/>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
这是我得到的结果:
我想要实现的目标:
我试图搜索文档和互联网上的线程,但我没有找到实现这一目标的方法,我怎么能意识到这一点?
我DataGrid
在WPF项目窗口中有一个WPF .我用a填充了网格DataTable
,并自动生成了列(不幸的是必需),并且需要根据某些其他因素更改列的标题颜色.
我有一个需要突出显示的列名列表,并且可以很容易地根据它来计算出它们的索引(因为我自己生成了它们DataGrid
).
但是,我似乎无法让列标题改变颜色,这必须在代码中完成,因为我不知道在设计时哪些列需要突出显示.我已经在标题上有一些模板......不确定这是否"覆盖"我想要做的事情.
网格:
<DataGrid FrozenColumnCount="1" AutoGenerateColumns="True" Grid.Row="1"
AlternationCount="2" HeadersVisibility="Column" Name="dgSkillsMatrix"
Margin="0,0,2,1" HorizontalGridLinesBrush="White" VerticalGridLinesBrush="White"
AlternatingRowBackground="#FFD0D0EB" RowBackground="#FFECECF5" FontSize="10.5"
Grid.ColumnSpan="1" CellStyle="{StaticResource CellHighlighterStyle}"
ColumnHeaderStyle="{StaticResource dataGridColumnHeader}" />
Run Code Online (Sandbox Code Playgroud)
标题模板/样式:
<DataTemplate x:Key="RotateHeaderTemplate" >
<TextBlock Text="{Binding}" Foreground="Blue" >
<TextBlock.LayoutTransform>
<RotateTransform Angle="-90" />
</TextBlock.LayoutTransform>
</TextBlock>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止尝试更改列标题(在Window_Activated
实际构建网格/ WPF树时在构造函数之后调用事件调用):
Style newStyle = new System.Windows.Style()
{
TargetType = typeof(DataGridColumn)
};
// SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#F70F49"))
newStyle.Setters.Add(new Setter(DataGridColumn.HeaderStringFormatProperty, new SolidColorBrush(Colors.Red)));
this.dgSkillsMatrix.Columns[4].HeaderStyle = newStyle;
Run Code Online (Sandbox Code Playgroud) 我当前正在尝试获取 DataGrid 中选定行的内容。
问题是我实际上得到了一个 DataRowView 但我无法用它做任何事情......
我想访问 DataGrid 中所选行的所有字段。
这是可以帮助您的代码:
XAML:
<DataGrid SelectionUnit="FullRow" SelectedItem="{Binding SelectedZone, Mode=TwoWay}" AutoGenerateColumns="True" Margin="0,167,6,24" Name="existingCase" Width="780" >
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<EventSetter Event="MouseDoubleClick" Handler="resultDataGrid_MouseDoubleClick"/>
</Style>
</DataGrid.RowStyle>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
CS :
private void resultDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (sender != null)
{
SelectedZone = existingCase.SelectedItem;
// SelectedZone is declared as private object SelectedZone
MessageBox.Show(SelectedZone.GetType().ToString());
// Result to a System.Data.DataRowView
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助
如何在 WPF 中捕获扩展器标题单击事件?谢谢
<Expander IsExpanded="{Binding Items[0], Mode=OneWay, Converter={StaticResource expanderExpandedConverter}}" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Hidden" Loaded="Expander_Loaded" >
<Expander.Header>
<DockPanel PreviewMouseLeftButtonDown="Expander_MouseLeftButtonUp">
<TextBlock Text="{Binding Path=Name}" Style="{StaticResource GroupStyle}" ScrollViewer.HorizontalScrollBarVisibility="Hidden"></TextBlock>
</DockPanel>
</Expander.Header>
<Expander.Style>
<Style TargetType="{x:Type Expander}">
<Setter Property="TextElement.FontFamily" Value="Arial Nova"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
<Setter Property="BorderBrush" Value="Black"/>
</Style>
</Expander.Style>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
Run Code Online (Sandbox Code Playgroud)
我尝试过此操作,但如果我单击扩展器的切换箭头,它不会捕获该事件
wpf ×11
xaml ×11
c# ×6
datagrid ×2
stackpanel ×2
textblock ×2
.net ×1
.net-3.5 ×1
binding ×1
click ×1
contextmenu ×1
datarowview ×1
events ×1
resize ×1
scrollbars ×1
width ×1
wpf-controls ×1
wpf-grid ×1