Laden...

Forenbeiträge von amu Ingesamt 15 Beiträge

02.05.2024 - 10:28 Uhr

Guten Morgen, ich habe eine Vorlage für Bootstrap Cards geschaffen. Nun wäre meine frage, wie kann ich von den einzelnen Cards dieser Vorlage Styles mitgeben. z.b. wie breit die Card sein soll. denn wenn ich Styles mitgeben will kommt dieser Fehler: ... does not have a property matching the name 'style'.

public abstract class CardBase<TViewModel> : BaseComponent<TViewModel> where TViewModel : ICardViewModel
{
    [Inject]
    public required ICardService CardService { get; set; }
    [Parameter]
    public required RenderFragment<TViewModel> HeaderContent { get; set; }
    [Parameter]
    public required RenderFragment<TViewModel> BodyContent { get; set; }
    [Parameter]
    public RenderFragment<TViewModel>? FooterContent { get; set; }

    private CardDefinition? _cardDefinition;

    protected override void OnInitialized()
    {
        base.OnInitialized();
        _cardDefinition = new CardDefinition(ViewModel);
        CardService.Register(_cardDefinition);
    }

    public RenderFragment GetHeaderContent()
        => HeaderContent.Invoke(ViewModel);

    public RenderFragment GetBodyContent()
        => BodyContent.Invoke(ViewModel);

    public RenderFragment? GetFooterContent()
    {
        if (FooterContent != null)
            return FooterContent.Invoke(ViewModel);

        return null;
    }
}


<div class="card ">
   <div class="card-header">
       @GetHeaderContent()
   </div>
   <div class="card-body ">
       @GetBodyContent()
   </div>
   @if(FooterContent != null)
   {
       <div class="card-footer">
           @GetFooterContent()
       </div>
   }
</div>
<Card TViewModel="IUserInformationCardViewModel" style="width:200px">
       <HeaderContent>
           <div>
               <h5 class="">Urlaubsplanung</h5>
           </div>
       </HeaderContent> 
</Card>
20.02.2024 - 12:31 Uhr

Guten Tag,

ich habe auf meiner seiter eingebaut das das navbar erst anzeigt, nachdem sich der User angemeldet hat. Aber dies geschieht nicht, deshalb dachte ich man musste OnPropertyChanged nutzen oder ähnliches hätte jemand tipps wie das geht?

Code

<div class="page">
     <AuthenticateComponent>
         <Authenticated>
            <div class="sidebar">
                <NavMenu />
            </div>


         </Authenticated>
      </AuthenticateComponent>
</div>
01.02.2024 - 09:13 Uhr

Guten Morgen,

ich habe eine Tabelle erstellt. Nun möchte ich erreichen wenn ich zwei verschiedene spalten drücke, das zwischen den beiden ein Border entsteht. Z.B. wie bei Excel. Nur weiß ich nicht, wenn ich auf eine Spalte geklickt habe, wie ich herausfinde welche Spalte gedrückt wurde.

26.01.2024 - 12:08 Uhr

Guten Morgen,

ich versuche momentan ein Kalender auf der Webseite zu visualisieren. Der Kalender wird auch soweit angezeigt, aber nun möchte ich, das nicht alles aufeinmal angezeigt wird, sondern das ich durch Tab klicks zum nächsten Monat komme. ich hätte auch ne Idee. nach jeden Monats ende ein neuen DIV erstellen der dann in den neuen Tab erscheinen soll,  aber leider kann man keine divs in   <tr> setzen im bild habe ich es noch mal Visualisiert.

Code.

<table class="table">
   <tbody>
       <tr>
           <td> </td>
               @for (int month = 1; month <= 12; month++)
               {
                   for (int day = 1; day <= DateTime.DaysInMonth(DateTime.Now.Year, month); day++)
                   {
                       DateTime curDay = new DateTime(2024, month, day);
                       <td style="text-align:center">@curDay.Day</td>
                   }
               } 
       </tr>
       @foreach (var user in ViewModel.GetAllUser())
       {
           <tr>
               <td>@user.Name</td>
               @foreach (var day in ViewModel.Days)
               {
                   if (day.IsWeekend)
                   {
                       <td class="border-1" style="background:#B10000"></td>
                   }
                   else
                   {
                       switch (day.DateType)
                       {
                           case Services.Database.Enums.CalenderDayTypeEnum.SchoolHoliday:
                               <td class="border-1" style="background:#C9CCD1"></td>
                               break;
                           case Services.Database.Enums.CalenderDayTypeEnum.Holiday:
                               <td class="border-1" style="background:#E8494C"></td>
                               break;
                           default:
                               <td class="border-1"></td>
                               break;
                       }
                   }
               }
           </tr>
       }
   </tbody>
</table>
10.01.2024 - 16:46 Uhr

ok denke jetzt sollte es gehen thx

10.01.2024 - 15:51 Uhr

dort ist auch null bei Parent 😃

hab es jetzt mal so gemacht, bis ich dann zum gesuchten Parent komme.

 var parent = VisualTreeHelper.GetParent(obj) as UIElement;
 var parent2 = VisualTreeHelper.GetParent(parent) as UIElement;
 var parent3 = VisualTreeHelper.GetParent(parent2) as UIElement;
 var parent4 = VisualTreeHelper.GetParent(parent3) as UIElement;
 var parent5 = VisualTreeHelper.GetParent(parent4) as UIElement;
 var parent6 = VisualTreeHelper.GetParent(parent5) as UIElement;

 ((StackPanel)parent6).Children.Remove(obj);

aber das remove funktioniert nicht. Es kommt keine Fehlermeldung, aber es entfernt es nicht.

10.01.2024 - 15:17 Uhr

liefert leider auch null oder ich hab einen Logikfehler

10.01.2024 - 13:39 Uhr

ja stimmt obj.parent ist null. Hättest du eventuell eine andre Idee wie ich den Border dann von jetzigen Template löschen kann und im anderen speichern kann?

10.01.2024 - 11:28 Uhr

ich versuche das ich ein Border ziehen kann von einen Template ins andere. Wenn ich es ohne Template mache funktioniert es.

private void TextBox_MouseMove(object sender, MouseEventArgs e)
{
    var canvas = sender as Border;

    base.OnMouseMove(e);
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        DragDrop.DoDragDrop(this, canvas, DragDropEffects.Move);
    }
}

private void Stackpanel_Drop(object sender, DragEventArgs e)
{
    var obj = e.Data.GetData(typeof(Border)) as Border;

    ((StackPanel)(obj.Parent)).Children.Remove(obj);

    ((StackPanel)sender).Children.Add(obj);
    ((StackPanel)sender).UpdateLayout();
}
<StackPanel Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center" Background="Transparent" AllowDrop="True" Drop="Stackpanel_Drop" >
    <StackPanel.Resources>
        <Style TargetType="{x:Type Border}">
            <Setter Property="Margin" Value="0,10,0,0"/>
        </Style>
    </StackPanel.Resources>
    <ItemsControl ItemsSource="{Binding FinishedTasksList}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border Background="LightGray" Height="85" Width="250" MouseMove="TextBox_MouseMove">
                    <TextBlock Text="{Binding Details}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

Von diesem Xaml-Code gibt es 2 Weitere die Ähnlich sind

wenn ich es nur so z.b. 3 Borders anlege und sie verschiebe funktioniert es

denke bei StackPanel_Drop muss was angepasst werden. Einiges Probiert, aber keine Lösung gefunden

09.01.2024 - 11:29 Uhr

Bin noch neu mit WPF. was vom Code würdest du in den ViewModel Packen?

09.01.2024 - 11:12 Uhr

Hallo, ich versuche das ein Canvas Control bei einer bestimmten Position in ein bestimmtes Stack Panel hinzugefügt wird. bekomme aber diese Fehlermeldung:

System.InvalidOperationException: "Bei dem angegebenen Element handelt es sich bereits um das logische untergeordnete Element eines anderen Elements. Führen Sie zuerst eine Trennung durch."

C# Code

private void TextBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    double postion = e.GetPosition(canvas).X - firstXPos - canvas.Margin.Left;

    if (postion <= 0)
    {
        StackPanelCol0.Children.Add(MoveableBorder);
        StackPanelCol1.Children.Remove(MoveableBorder);
        StackPanelCol2.Children.Remove(MoveableBorder);
    }
    else if (postion > 0 && postion < 300)
    {
        StackPanelCol0.Children.Remove(MoveableBorder);
        StackPanelCol1.Children.Add(MoveableBorder);
        StackPanelCol2.Children.Remove(MoveableBorder);
    }
    else
    {
        StackPanelCol0.Children.Remove(MoveableBorder);
        StackPanelCol1.Children.Remove(MoveableBorder);
        StackPanelCol2.Children.Add(MoveableBorder);
    }
        movingObject = null;
}

XAML

   <Grid>
      <Grid.RowDefinitions>
          <RowDefinition Height="50"/>
          <RowDefinition />
      </Grid.RowDefinitions>
      <!--AddTasks-->

      <!--Tasks-->
      <Grid Grid.Row="1">
          <Grid.ColumnDefinitions>
              <ColumnDefinition/>
              <ColumnDefinition/>
              <ColumnDefinition/>
          </Grid.ColumnDefinitions>
          
          <Grid.RowDefinitions>
              <RowDefinition Height="50"/>
              <RowDefinition/>
          </Grid.RowDefinitions>
          
          <StackPanel Name="StackPanelCol0" Grid.Column="0" Grid.Row="1" AllowDrop="True"/>
          <StackPanel Name="StackPanelCol1" Grid.Column="1" Grid.Row="1" AllowDrop="True"/>
          <StackPanel Name="StackPanelCol2" Grid.Column="2" Grid.Row="1" AllowDrop="True"/>

          <Canvas x:Name="canvas" Grid.Row="1" Background="Transparent" MouseLeftButtonDown="TextBox_MouseLeftButtonDown" HorizontalAlignment="Center" Margin="0,0,300,0"
                  MouseMove="TextBox_MouseMove" MouseLeftButtonUp="TextBox_MouseLeftButtonUp">
              <Border x:Name="MoveableBorder" Background="Red" Height="85" Width="250"  >
                  <TextBlock Text="2323" HorizontalAlignment="Center" VerticalAlignment="Center"/>
              </Border>
          </Canvas>
      </Grid>
  </Grid>
11.12.2023 - 13:44 Uhr

ah ja stimmt. Vielen Dank

11.12.2023 - 13:34 Uhr

Hallo, ich versuche das meine WPF Seite eine bestimme Größe hat beim öffnen. bis jetzt leider erfolglos

<Page x:Class="StoreManagment.Manager.DashboardView"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:StoreManagment.Manager"
      mc:Ignorable="d" 
      d:DesignHeight="600" d:DesignWidth="1300"
      Width="600" Height="1300"
      Title="DashboardView" Background="#272537">
01.12.2023 - 12:30 Uhr

Ok danke. Hättest du eventuel eine andere Vorgehensweise, sodass der Button automatisch eine Reihe nach unten geht, wenn er den Labels zu nah kommt?

01.12.2023 - 12:16 Uhr

Ich versuche momentan, das der Button "AddEmployeeButton" eine Reihe nach unter schoben wird. wenn er sich die labels nährt(Sind in einem WrapPanel).

Dabei bekomme ich diese Fehlermeldung

"Bei dem angegebenen Element handelt es sich bereits um das logische untergeordnete Element eines anderen Elements. Führen Sie zuerst eine Trennung durch."

Xaml-Snipet

<Grid x:Name="MainGrid">
     <Grid.ColumnDefinitions>
           <ColumnDefinition />
           <ColumnDefinition />
     </Grid.ColumnDefinitions>

     <Grid.RowDefinitions>
          <RowDefinition Height="auto"/>
          <RowDefinition Height="auto" />
          <RowDefinition Height="auto" />
          <RowDefinition Height="*" />
     </Grid.RowDefinitions>

     <Label Content="Mitarbeiter" FontSize="20" />

     <WrapPanel Name="FilterbuttonWrapPanel" Orientation="Horizontal" Margin="10,5,0,0"  Grid.Row="1" Grid.ColumnSpan="2" SizeChanged="FilterbuttonWrapPanel_SizeChanged">
              <Button Content="Alle" Name="AlleButton" Style="{StaticResource FilterButton}" Click="AlleButton_Click"/>
              <Button Content="Angestellte" Name="AngestellteButton" Style="{StaticResource FilterButton}"/>
              <Button Content="Auszubildende" Name="AuszubildendeButton" Style="{StaticResource FilterButton}"/>
              <Button Content="Abteilungsleiter" Name="AbteilungsleiterButton" Style="{StaticResource FilterButton}"/>
     </WrapPanel>

     <Border Grid.Row="1" Grid.Column="2" HorizontalAlignment="Right" BorderThickness="0.5" BorderBrush="Black" Background="Orange" CornerRadius="10" Width="170" Height="30"  >
              <Button Name="AddEmployeeButton" Content="Mitarbeiter Hinzufügen" Style="{StaticResource FilterButton}" Click="AddEmployeeButton_Click" Margin="0" FontSize="15"/>
     </Border>
</Grid> 

Code behind

if (FilterbuttonWrapPanel.ActualWidth < 450)
{
    Grid.SetRow(AddEmployeeButton, 2);
    //AddEmployeeButton.Margin = new Thickness(0, 20, 0, 0);
    MainGrid.Children.Add(AddEmployeeButton);
}
else
{
    Grid.SetRow(AddEmployeeButton, 1);
    //AddEmployeeButton.Margin = new Thickness(0);
    MainGrid.Children.Add(AddEmployeeButton);
}