【问题标题】:Select tabItem programmatically when selecting an element in silverlight在silverlight中选择元素时以编程方式选择tabItem
【发布时间】:2012-08-04 08:30:42
【问题描述】:

我有一个图像编辑器,它在画布上有许多图像元素和文本元素。我有两个单独的选项卡,允许用户重新调整文本或图像的大小。我想在选择文本元素时切换到文本选项卡,并在选择图像时切换到图像选项卡。我不知道该怎么做。

MainPage.xaml -

<!-- Control Panel -->
<sdk:TabControl x:Name="elementEditor" Margin="10,0,10,19" Width="215" Background="#FFD6D6D6"
       Grid.RowSpan="2">//removed selectedIndex binding from here
<sdk:TabItem x:Name="tabCanvasSettings" DataContext="{Binding Project}">
    <sdk:TabItem.Header x:Name="tabCanvas">
        <TextBlock Text="Canvas" />
    </sdk:TabItem.Header>
    <sdk:TabItem.Content>
        <!-- Content -->
    </sdk:TabItem.Content>
</sdk:TabItem>

<!-- Text tab -->
<sdk:TabItem x:Name="tabText" IsSelected="{Binding Path=TabTextSel}">
    <sdk:TabItem.Header>
        <TextBlock Text="Text" />
    </sdk:TabItem.Header>
    <sdk:TabItem.Content>
        <!-- Content -->
    </sdk:TabItem.Content>
</sdk:TabItem>

<!-- Image tab -->
<sdk:TabItem x:Name="tabImage" IsSelected="{Binding Path=TabImgSel}">
    <sdk:TabItem.Header>
        <TextBlock Text="Image" />
    </sdk:TabItem.Header>
    <sdk:TabItem.Content>
        <!-- Content -->
    </sdk:TabItem.Content>
</sdk:TabItem>
</sdk:TabControl>

Project.cs(不是我的 MainPage 代码隐藏)-

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Effects;
using System.Windows.Media.Imaging;
using ImageEditor.Client.Behaviors;
using ImageEditor.Client.Views;
using System.Linq;
using ImageEditor.Client.ImageDesignerService;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace ImageEditor.Client.BLL
{
  public class Project : INotifyPropertyChanged
  {
    private bool tabTextSel;
    public bool TabTextSel
    {
        get { return tabTextSel; }
        set
        {
            tabTextSel = value;
            NotifyPropertyChanged("TabTextSel");
        }
    }

    private bool tabImgSel;
    public bool TabImgSel
    {
        get { return tabImgSel; }
        set
        {
            tabImgSel = value;
            NotifyPropertyChanged("TabImgSel");
        }
    }
    //Other properties and methods

    public void element_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        this.SelectedElement = sender as FrameworkElement;
        if (sender is TextBlock)
        {
            this.SelectedTextElement = sender as TextBlock;

            //Change tab to text tab
            tabImgSel = false;
            tabTextSel = true;
        }
        else if (sender is Image)
        {
            this.SelectedImageElement = sender as Image;

            //Change tab to image tab
            tabTextSel = false;
            tabImgSel = true;
        }

    }

  }
}

如何让它在这里切换标签?我敢肯定,这可能很简单,我只是无法解决。当我调试时,这些值似乎可以很好地传递给绑定,但它们仍然没有正确切换

【问题讨论】:

  • 有完整源代码的最终解决方案吗?

标签: c# wpf silverlight tabitem


【解决方案1】:

您的属性(TabTextSel 和 TabImgSel)应该是 bool 类型,而不是字符串。您应该将它们设置为 true 或 false (bool)。

【讨论】:

  • 谢谢,这绝对是一件简单的事情。我已经相应地更新了上面的代码。但是,它仍然没有切换标签。调试时,它似乎工作正常。绑定显示 true 和 false 的正确值,但选项卡没有切换
  • @Steve 您需要将绑定路径从 Project.TabImgSel 更改为 TabImgSel 等。您无需在绑定路径中指定“Project”,因为您已经将其设置为 DataContext。跨度>
  • 哦,我实际上已经更改了它,但忘记更新我在问题中使用的代码。所以它仍然没有随着改变而切换
  • 所以,我明确设置了 IsSelected ="true",这会导致在我运行应用程序时将其设置为选定的选项卡。所以 IsSelected="true" 有效。显然,这不是问题。使用我的绑定值 - 当我调试时,我可以看到当我单击元素时 tabTextSel 和 tabImgSel 设置正确。如果我将鼠标悬停在我的 MainPage.xaml 上的 IsSelected 绑定上,绑定值会正确显示为 true 或 false,但它仍然没有切换...???
  • @Steve 你应该把你的 DataContext 放到 TabControl 或者一些父控件,而不是第一个 TabItem。确保您的 DataContext 设置正确。
【解决方案2】:

您必须分配给属性而不是变量,以便数据绑定可以通过调用您的 NotifyPropertyChanged 方法来工作....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2011-09-02
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多