小编Spe*_*ish的帖子

动态调整开放式手风琴的大小

我有一个手风琴,其内容的高度可以动态调整大小.我想看到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控件内进行适当调整的位置.有没有人有想法?

wpf accordion wpftoolkit

9
推荐指数
1
解决办法
2616
查看次数

多个显示器上的坐标错误

我有一个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 …

wpf multiple-monitors

7
推荐指数
1
解决办法
3161
查看次数

拖放到桌面图标上

我认为这应该很简单.我在这里看过类似的问题,但我的老大脑不清楚它应该如何运作.我有一个Windows窗体应用程序.我的用户想要将文件拖到桌面上的应用程序图标上,然后使用该文件执行程序.所以我想做的是:

接受图标上的删除文件; 启动应用程序并将文件路径详细信息放入文本框中,以便用户可以处理它.

该应用程序是用C#编写的

谢谢

c# drag-and-drop winforms

6
推荐指数
1
解决办法
4345
查看次数

使用空行填充DataGrid

我有一个DataGrid必然的DataTable.我希望DataGrid总是至少有十(空)行,如果没有足够的真实数据项(数据一点一点地进入).
例

一种方法是DataTable在初始化时轻松添加十个空行.但是当一个真正的数据项进来时,我无法轻松添加该行,我必须找到第一个空行来覆盖它,这不是很方便.
那么有人知道更智能/内置的方法来实现这一目标吗?

wpf datagrid

6
推荐指数
1
解决办法
4178
查看次数

可重复使用的多边形

我希望在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 resources xaml templates polygon

5
推荐指数
1
解决办法
3212
查看次数

如何获得堆栈面板的实际当前高度?

你好,

我想在 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 xaml panel stackpanel

3
推荐指数
1
解决办法
3494
查看次数

WPF:在不知道项目的情况下更改ComboBox的FontSize

我想在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)

就这样!

wpf combobox styles font-size

2
推荐指数
2
解决办法
8693
查看次数

为什么我的bash脚本中出现语法错误?

这是我一直在尝试的脚本:

#!/bin/bash
    case “$1” in 

    [0-9][A-Z])
    echo “ <<Usage: $0 >> Script5.rc argb  ”
    ;;

./Script.rc
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我收到以下错误:

意外令牌附近的语法错误

我在这做错了什么?

linux bash

0
推荐指数
1
解决办法
716
查看次数