Domanda

Ho creato una pagina iniziale che si carica quando l'applicazione viene eseguita, ma è anche mostrando il mio tabcontrol (due TabItems per la modifica e diagraming).

Come faccio a nascondere i miei oggetti TabControl all'avvio e solo mostro quando un utente seleziona il file -> nuova

Molte grazie!

XAML:

<TabControl Height="Auto" Name="tabControl1" Width="Auto">
            <TabItem Header="Diagram" Name="DiagramTab"></TabItem>
            <TabItem Header="Rulebase" Name="RuleTab" >
              <Grid>
               <TextBox Height="Auto" Name="RuleText" Width="Auto" Text="" AcceptsTab="True" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" GotFocus="FocusChanged" KeyDown="ContentChanged" HorizontalScrollBarVisibility="Visible" />
              </Grid>
           </TabItem>
        </TabControl>

Ecco il mio file -> nuova voce di menu:

 private void NewItem(object sender, RoutedEventArgs e)
    {
        ProcessNewCommand();
    }

private void ProcessNewCommand()
    {
        if (dataChanged)
        {
            string sf = SaveFirst();
            if (sf != "Cancel")
            {
                ClearState();                    
            }
        }
        else
        {
            ClearState();
        }
    }

Stile:

<Style TargetType="TabItem" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <Grid>
                        <Border 
                            Name="Border"
                            Background="LightBlue"
                            BorderBrush="Black" 
                            BorderThickness="0" 
                            CornerRadius="6,6,0,0" >
                 <ContentPresenter x:Name="ContentSite"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            ContentSource="Header"
                            Margin="12,2,12,2"/>
                        </Border>
                   </Grid>
         <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightBlue" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="LightGray" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
È stato utile?

Soluzione

In questi scenari di solito hanno un ProjectViewModel (o ProjectModel) che viene aggiunto come il DataContext del Window contenente. Il TabControl potrebbe avere quelle schede legati alle voci del contesto dati.

public class ProjectViewModel : YourViewModelBase
{
    public EditingViewModel Editor { ... }

    public DiagramingViewModel Diagram { ... }
}

Così, quando il NewCommand spara si direbbe this.DataContext = new ProjectViewModel(). Lo stile di seguito si prenderà cura di tutto il resto.

<Window.Resources>
    <Style x:Key="HideWithoutDataContext">
        <Setter Property="UIElement.Visibility" Value="Visible" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding}" Value="{x:Null}">
                <Setter Property="UIElement.Visibility" Value="Collapsed" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<TabControl>
    <TabItem Header="Start Page">
       ...
    </TabItem>
    <TabItem Header="Editor"
             DataContext="{Binding Editor}"
             Style="{DynamicResource HideWithoutDataContext}"/>
    <TabItem Header="Diagram"
             DataContext="{Binding Diagram}"
             Style="{DynamicResource HideWithoutDataContext}"/>
</TabControl>

Altri suggerimenti

Si potrebbe associare proprietà di visibilità del Tab per classe di applicazione o qualsiasi altra cosa avete in modo da mostrare solo le schede una volta che l'utente preme Nuovo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top