我有一个手风琴,其内容的高度可以动态调整大小.我想看到Accordion动态响应子项的高度,但我在这方面遇到了麻烦.
<lt:Accordion Name="MyAccordion"
SelectionMode="ZeroOrOne"
HorizontalAlignment="Stretch">
<lt:AccordionItem Name="MyAccordionItem"
Header="MyAccordion"
IsSelected="True"
HorizontalContentAlignment="Stretch"
VerticalAlignment="Stretch">
<StackPanel>
<Button Content="Grow" Click="Grow"/>
<Button Content="Shrink" Click="Shrink"/>
<TextBox Name="GrowTextBox"
Text="GrowTextBox"
Height="400"
Background="Green"
SizeChanged="GrowTextBox_SizeChanged"/>
</StackPanel>
</lt:AccordionItem>
</lt:Accordion>
private void Grow(object sender, System.Windows.RoutedEventArgs e)
{
GrowTextBox.Height += 100;
}
private void Shrink(object sender, System.Windows.RoutedEventArgs e)
{
GrowTextBox.Height -= 100;
}
private void GrowTextBox_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
MyAccordion.UpdateLayout();
MyAccordionItem.UpdateLayout();
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果我崩溃然后重新打开手风琴,它就会按照我想要的方式成型,但我希望在孩子调整大小时立即调整大小.
我试图通过添加一个在Accordion和AccordionItem上调用UpdateLayout()的SizeChanged事件处理程序来解决这个问题,但这没有任何视觉效果.我无法弄清楚在Accordion控件内进行适当调整的位置.有没有人有想法?
我有一个Datagrid,我想知道datacell的位置,用窗口覆盖它.
只有一台显示器,它可以正常工作,但是有多个显示器,窗口就会移位.
这是代码:
Point point = cell.PointToScreen(new Point(0, 0));
...
Window myWindow = new Window();
myWindow.Top = point.Y;
myWindow.Left = point.X;
Run Code Online (Sandbox Code Playgroud)
有人在多台显示器上有定位经验吗?
编辑:
我做了以下测试:
public MyWindow()
{
...
this.LocationChanged += MyWindow_LocationChanged;
}
void MyWindow_LocationChanged(object sender, EventArgs e)
{
Console.WriteLine(this.Top + " <--> " + this.PointToScreen(new Point(0, 0)).Y);
}
Run Code Online (Sandbox Code Playgroud)
结果:
- 单显示器:0 < - > 30; 20 < - > 50; 100 < - > 130
==>始终相差30(可能由标题栏引起)
- 双显示器:0 < - > 30; 20 - 55; 100 < - > 153 …
我认为这应该很简单.我在这里看过类似的问题,但我的老大脑不清楚它应该如何运作.我有一个Windows窗体应用程序.我的用户想要将文件拖到桌面上的应用程序图标上,然后使用该文件执行程序.所以我想做的是:
接受图标上的删除文件; 启动应用程序并将文件路径详细信息放入文本框中,以便用户可以处理它.
该应用程序是用C#编写的
谢谢
我有一个DataGrid必然的DataTable.我希望DataGrid总是至少有十(空)行,如果没有足够的真实数据项(数据一点一点地进入).

一种方法是DataTable在初始化时轻松添加十个空行.但是当一个真正的数据项进来时,我无法轻松添加该行,我必须找到第一个空行来覆盖它,这不是很方便.
那么有人知道更智能/内置的方法来实现这一目标吗?
我希望在xaml中有一个画布,我放置一些图标.这些图标是像这样的多边形:
<Polygon Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/>
Run Code Online (Sandbox Code Playgroud)
但是我想多次使用一个图标,所以我想在资源中定义它并通过引用将它包含在某个位置的画布中,如下所示:
<Page.Resources>
<Polygon Key="icon1" Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/>
<Polygon Key="icon2" Points="0,0 10,30, 10,60 20,0" Fill="Blue" Stretch="Uniform"/>
...
</Page.Resources>
<Canvas>
<Polygon Reference="icon1" X="0" Y="0"/>
<Polygon Reference="icon2" X="10" Y="10"/>
<Polygon Reference="icon1" X="20" Y="20"/>
...
</Canvas>
Run Code Online (Sandbox Code Playgroud)
我在http://www.codeproject.com/KB/WPF/GraphicInXAMLAndWPF.aspx 上找到了一个可能的解决方案,其中多边形存储在绘图图像中,但似乎需要很多开销.
有人有更好的想法如何解决这个问题?
你好,
我想在 WPF 中制作一个自定义的堆栈面板,它会根据面板的高度自动将他的孩子调整到一定的大小。但是面板高度是动态的,因为它延伸到他的父母。当我想获得高度时(我尝试了所有可能性,请参阅代码),它始终为 0 或未定义,尽管在构建解决方案中它绝对不是 0。这是代码:
XAML:
<my:AutoSizeButtonStackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
代码隐藏:
public class AutoSizeButtonStackPanel : StackPanel
{
public void AddChild(Button newButton)
{
double getPanelHeight;
getPanelHeight = this.ActualHeight; //is 0
getPanelHeight = this.ViewportHeight; //is 0
getPanelHeight = this.Height; //is n. def.
getPanelHeight = this.DesiredSize.Height; //is 0
getPanelHeight = this.RenderSize.Height; //is 0
newButton.Height = getPanelHeight / 2;
this.Children.Add(newButton);
}
}
Run Code Online (Sandbox Code Playgroud) 我想在wpf中设置FontSize一些ComboBoxes.但我找到的唯一解决方案是设置FontSize特定的ComboBoxItems.但这些项目是动态添加的(所以我ItemsChanged每次都可以收听并设置样式,但这非常难看).有没有办法设置一般的FontSize所有项目ComboBox?
EDIT1:将ComboBox自身也在动态地添加代码上课.
编辑2:按照你的答案,它必须是这样的:
<Style TargetType="ComboBox" x:Key="MyComboBox"">
<Setter Property="ItemContainerStyle" Value="{DynamicResource MyComboItemStyle}"/>
</Style>
<Style x:Key="MyComboItemStyle" TargetType="{x:Type ComboBoxItem}">
<Setter Property="FontSize" Value="14"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
但它也没有效果!
编辑3:这是我添加项目的方式:
string[] strEnums = //Some dynamic magic;
foreach (string str in strEnums)
{
(input as ComboBox).Items.Add(strEnum);
}
Run Code Online (Sandbox Code Playgroud)
EDIT4:这是组合框的初始化:
input = new ComboBox();
input.SetResourceReference(ComboBox.StyleProperty, "MyComboBox");
Run Code Online (Sandbox Code Playgroud)
就这样!
这是我一直在尝试的脚本:
#!/bin/bash
case “$1” in
[0-9][A-Z])
echo “ <<Usage: $0 >> Script5.rc argb ”
;;
./Script.rc
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到以下错误:
意外令牌附近的语法错误
我在这做错了什么?