TabItem, связывающий WPF

Я просто изучаю WPF, и я мог использовать некоторую справку. У меня есть приложение, которые используют TabControl, и динамично генерирует новые вкладки, на каждой Вкладке у меня есть один TextBox, и теперь я хотел бы добавить кнопку отмены к панели инструментов, которая не является частью вкладки (VisualStudio как). Кнопка отмены должна работать только над TextBox, который находится на активной вкладке и если не будет никакой вкладки, или отмена не может быть выполнена, то это будет отключено. И я понятия не имею, как связать эти два объекта (Содержание вкладки имеет его, владеют xaml файлом).

Только вещь, за которой я следую, добавляет щелчок eventHandler к MenuItem и затем находит текстовое поле на активной вкладке по имени, но теперь я не могу позволить/запретить как, я пожелал бы.

Я надеюсь, что это понятно. Спасибо за любую справку

5
задан Zviri 3 June 2010 в 15:49
поделиться

3 ответа

То, что вы хотите, было бы намного сделать намного проще с помощью встроенной системы команд WPF. По сути, он имеет встроенное событие «CanExecute», в котором вы можете проверить выбранную страницу TabControl и так далее. Трудно привести конкретный пример без какого-либо примера кода для работы, но, надеюсь, это поможет вам встать на правильный путь.

0
ответ дан 14 December 2019 в 04:31
поделиться

Возможно, вас заинтересует пример применения Writer проекта WPF Application Framework (WAF) .. Он показывает простой редактор с MDI с вкладками (аналогично Visual Studio) и реализует функцию Отмена/Повтор. Это может быть именно то, что вы ищете.

0
ответ дан 14 December 2019 в 04:31
поделиться

Я привел пример, иллюстрирующий "правильный WPF-способ" реализации этого сценария. Опять же, он может не совпадать с тем кодом, который у вас уже есть, но он должен дать вам некоторые идеи о том, как адаптировать ваш код. Во-первых, code-behind:

public partial class TabItemBinding : Window
{
    public ObservableCollection<TextItem> Items { get; set; }

    public TabItemBinding()
    {
        Items = new ObservableCollection<TextItem>();

        Items.Add(new TextItem() { Header = "1", Content = new TextBox() { Text = "First item" } });
        Items.Add(new TextItem() { Header = "2", Content = new TextBox() { Text = "Second item" } });
        Items.Add(new TextItem() { Header = "3", Content = new TextBox() { Text = "Third item" } });

        InitializeComponent();
    }
}

public class TextItem
{
    public string Header { get; set; }
    public FrameworkElement Content { get; set; }
}

Здесь нет ничего безумного, я просто создаю класс модели и устанавливаю коллекцию этого класса. Настоящая радость происходит в XAML:

<Window x:Class="TestWpfApplication.TabItemBinding"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TabItemBinding" Height="300" Width="300"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <ToolBar Grid.Row="0">
        <Button Command="Undo">Undo</Button>
    </ToolBar>

    <TabControl Grid.Row="1" ItemsSource="{Binding Items}">
        <TabControl.ItemContainerStyle>
            <Style TargetType="TabItem">
                <Setter Property="Header" Value="{Binding Header}"/>
                <Setter Property="Content" Value="{Binding Content}"/>
            </Style>
        </TabControl.ItemContainerStyle>
    </TabControl>
</Grid>

Я подключаю Button к ApplicationCommands.Undo, который автоматически позаботится об отмене действия, пока у нас есть активный редактируемый TextBox. Сам TabControl привязан к коллекции, созданной нами в code-behind, которая предоставит заголовок и текст для редактирования. Любые правки, которые мы сделаем, можно будет отменить. Результат:

Скриншот http://img706.imageshack.us/img706/2866/tabitembinding.png

Кстати, важно отметить, что команда отмены автоматически отключается, если нет активного контекста редактирования. Таким образом, если нет страниц вкладок, она будет отключена без какого-либо дополнительного кода с нашей стороны.

8
ответ дан 14 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: