WPF C # Nascondi TabControl Articoli all'avvio dell'applicazione
-
08-10-2019 - |
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>
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.