小编Kev*_*n M的帖子

BringIntoView方法

在WPF中,我有一个包含7个不同组框的scrollviewer.每个groupbox都是不同表单的独立部分.因为滚动查看器太长了,所以我在面板左侧的堆栈面板中放置了一系列按钮,并完成了代码隐藏,因此单击按钮会触发相应组框的BringIntoView方法.

我的问题是,有没有办法强制BringIntoView每次都将组框定位在可见部分的顶部.默认情况下,BringIntoView仅移动滚动查看器,直到整个组框都在视图中,而不是显示最顶层的项目.有没有解决的办法?

我研究了使用ScrollToVerticalOffset,但无法弄清楚如何获得正确的位置,主要是因为它说groupbox没有Locate属性,我将用它来获取位置,然后用ScrollToVerticalOffset设置它.我在打字时想到的一件事就是让每个按钮 - 首先将jusmp压到顶部的groupbox,然后立即继续正确的一个,但这似乎是一种黑客攻击,我更喜欢找到正确的方法.:)

c# wpf alignment vertical-alignment scrollview

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

事件处理程序位于与MainWindow不同的类中

因此,我遵循以下站点上的指南来限制文本框可以接受的字符。

http://www.rhyous.com/2010/06/18/how-to-limit-or-prevent-characters-in-a-textbox-in-csharp/

我的问题是我不知道如何在辅助类中使事件处理程序触发。基本上,我如何告诉VS在该类而不是MainWindow中查找事件处理程序代码?我尝试搜索,但显然不知道要使用的正确术语。我使用的xaml参考是

xmlns:DigitBox="clr-namespace:System.Windows.Controls;assembly=PresentationFramework"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# wpf partial-classes event-handling

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

查找控件的直接祖先/父级

我有一个UserControl名字AddressTemplate,其中包含StackPanel各种各样的Labels&Textboxes.我需要的是一种方法来找到其中一个控件的直接祖先/父级AddressTemplate.从本质上讲,我需要一种方法来确定给定Textbox是否在其中AddressTemplate,或者在此之外UserControl,并且只是一个独立的控件.

到目前为止我想出的是:

private bool FindParent(Control target)
    {
        Control currentParent = new Control();

        if (currentParent.GetType() == typeof(Window))
        {

        }
        else if (currentParent.GetType() != typeof(AddressTemplate) && currentParent.GetType() != null)
        {
            currentParent = (Control)target.Parent;
        }
        else
        {
            return true;
        }

        return false;            
    }
Run Code Online (Sandbox Code Playgroud)

问题是,我不断收到InvalidCastException,因为它无法将StackPanel转换为Control.有人知道正确的演员阵容,还是一个可行的方法来解决这个问题?

c# wpf user-controls casting parent-child

4
推荐指数
1
解决办法
3307
查看次数

大型RegEx匹配导致程序挂起

前几天我试着问这个问题,并且承认没有好好说出问题或者首先发布代码,答案已经结束了.所以我在这里再试一次,因为老实说这让我很快就疯了.:)

我正在尝试实现这个Address Parser,它最初是一个基于控制台的c#程序.我已成功将其转换为独立的WPF程序,该程序仅包含TextBoxfor输入,a Button用于激活解析,以及TextBlock用于显示结果.在写这篇文章时,我确实将输出截断为我在主程序中需要的内容,但它仍能正常工作.我在下面列出了整个代码.

我的下一步是把它移植到我的主程序中,我通过字面意思使用复制/粘贴.然而,在运行此按钮后,程序会在按下按钮后挂起.最终VS给出了一个错误,即进程已经过长而没有抽出消息,并且TaskManager中的内存使用量从~70k逐渐增加到3,000,000.为此,我将该Parsing方法分配给后台工作者,希望减轻主进程的工作量.这确实解决了程序冻结,但后台线程只是做了同样的事情,提高了RAM使用率并且什么也没有返回.

所以现在我陷入了僵局.我知道问题出现在var result = parser.ParseAddress(input);语句中的某个地方,因为当为每行代码使用断点时,这是最后一个要触发的行.但基本上我不知道为什么这会导致一个WPF程序出现问题,而不是另一个.

如果有必要,我会非常乐意在某个地方发布主程序的完整源代码,但我无法想象在这里发布大约20个不同的类文件和项目代码是个好主意.:)

独立的WPF应用程序

namespace AddressParseWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        public void Execute()
        {
            AddressParser.AddressParser parser = new AddressParser.AddressParser();
            var input = inputTextBox.Text;

            var result = parser.ParseAddress(input);

            if (result == null)
            {
                outputTextBlock.Text = "ERROR. Input could not be parsed.";
            }
            else
            {
                outputTextBlock.Text …
Run Code Online (Sandbox Code Playgroud)

c# regex wpf parsing

4
推荐指数
1
解决办法
1902
查看次数

VB.NET执行顺序

我目前正在努力将一些VB源代码转换为C#.虽然我知道有一些转换器可以实现自动化,并且我可以实际使用这个特殊的dll而无需重写它,我正在部分地这样做,所以我可以更好地理解VB.并不是期望写它,但它至少帮助我能够阅读它.

在这样做的过程中,我遇到了令人困惑的事情.以下代码片段是示例,但我在整个程序中都看到了它.

VB源代码:

Friend Function AllocateObjectNumber() As Long
    AllocateObjectNumber = _nextFreeObjectNumber
    _nextFreeObjectNumber += 1
    _objectAllocatedCount += 1
End Function
Run Code Online (Sandbox Code Playgroud)

我的翻译C#代码:

    internal long AllocateObjectNumber()
    {
        cvNextFreeObjectNumber += 1;
        cvObjectAllocatedCount += 1;
        return cvNextFreeObjectNumber;
    }
Run Code Online (Sandbox Code Playgroud)

我不理解的是VB使用的流控制.我理解这AllocateObjectNumber += 1是用来代替的return cvNextFreeObjectNumber,但如果这一行在两个变量递增之前出现,那么该代码怎么不被视为无法访问?根据我对C#的理解,这个方法的第一行会立即返回到调用方法,整个方法基本上就是伪属性.

任何有用的解释?

.net c# vb.net return

4
推荐指数
1
解决办法
285
查看次数

虽然循环没有目的?

在阅读Java教程书时,我遇到了这段代码:

while(getImage().getWidth(frame) <= 0);

我起初认为这是一个错字,但在整本书中,它在多个地方重复了几次.很遗憾没有解释它的作用,所以我想知道它的目的是什么.从表面上来看,我知道它基本上什么都不做,因为即使它可以返回,true或者false,while语句也没有.这是一个特殊的语法案例吗?事实上,它做了什么?或者这只是毫无意义的代码,恰好不会对代码流产生负面影响(它不会返回任何错误,并且所有内容都按预期运行).

以下是完整的方法,如果它有帮助:

public void load(String filename)
{
    Toolkit tk = Toolkit.getDefaultToolkit();
    image = tk.getImage(getURL(filename));
    while(getImage().getWidth(frame) <= 0);
    double x = frame.getSize().width / 2 - width() / 2;
    double y = frame.getSize().height / 2 - height() / 2;
    at = AffineTransform.getTranslateInstance(x, y);
}
Run Code Online (Sandbox Code Playgroud)

java while-loop

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