[proofplan]
We choose an ordering of the points and blocks and form the square incidence matrix $N$. The point-pair condition gives the point Gram matrix identity $NN^\top = (k-\lambda)I + \lambda J$. We prove this matrix is invertible from the nontrivial parameter relations, deduce that $N$ is invertible, and then use the row and column sum identities to show that $N$ commutes with the Gram matrix. This transfers the Gram identity from rows to columns, so the off-diagonal entries of $N^\top N$ count block intersections and must all equal $\lambda$.
[/proofplan]
[step:Order the points and blocks and define the incidence matrix]
Write
\begin{align*}
X = \{x_1,\dots,x_v\}.
\end{align*}
Write also
\begin{align*}
\mathcal B = \{B_1,\dots,B_v\}.
\end{align*}
Define the incidence matrix $N \in \{0,1\}^{v \times v}$ by declaring, for each $1 \le i,j \le v$,
\begin{align*}
N_{ij}=1 \quad \text{if } x_i \in B_j,
\end{align*}
and
\begin{align*}
N_{ij}=0 \quad \text{if } x_i \notin B_j.
\end{align*}
Let $I \in \mathbb R^{v \times v}$ be the identity matrix, let $J \in \mathbb R^{v \times v}$ be the matrix all of whose entries are $1$, and let $\mathbb 1 \in \mathbb R^v$ be the column vector all of whose entries are $1$.
Because every block has exactly $k$ points, every column of $N$ has sum $k$, hence
\begin{align*}
N^\top \mathbb 1 = k \mathbb 1.
\end{align*}
Let $r$ denote the number of blocks containing a fixed point. In a $2$-$(v,k,\lambda)$ design, double-counting pairs $(y,B)$ with $y \in X \setminus \{x\}$ and $\{x,y\} \subset B$ gives
\begin{align*}
r(k-1)=\lambda(v-1).
\end{align*}
Double-counting incidences gives $|\mathcal B|k=vr$. Since the design is symmetric, $|\mathcal B|=v$, so $r=k$. Therefore every row of $N$ also has sum $k$, and
\begin{align*}
N\mathbb 1 = k\mathbb 1.
\end{align*}
[/step]
[step:Compute the point Gram matrix from point incidences]
For $1 \le i,\ell \le v$, the $(i,\ell)$ entry of $NN^\top$ is
\begin{align*}
(NN^\top)_{i\ell}=\sum_{j=1}^v N_{ij}N_{\ell j}.
\end{align*}
If $i=\ell$, this sum counts the blocks containing $x_i$, so it equals $k$. If $i \ne \ell$, this sum counts the blocks containing both $x_i$ and $x_\ell$, so it equals $\lambda$. Hence
\begin{align*}
NN^\top = (k-\lambda)I+\lambda J.
\end{align*}
Define
\begin{align*}
A := (k-\lambda)I+\lambda J \in \mathbb R^{v \times v}.
\end{align*}
Thus
\begin{align*}
NN^\top=A.
\end{align*}
[guided]
The product $NN^\top$ compares rows of the incidence matrix, so it counts common blocks through pairs of points. Its $(i,\ell)$ entry is
\begin{align*}
(NN^\top)_{i\ell}=\sum_{j=1}^v N_{ij}N_{\ell j}.
\end{align*}
Each factor $N_{ij}N_{\ell j}$ equals $1$ exactly when both $x_i$ and $x_\ell$ lie in the block $B_j$, and equals $0$ otherwise.
When $i=\ell$, the sum counts all blocks containing $x_i$. We now justify that this number is $k$ inside the guided argument. Let $r$ denote the number of blocks containing a fixed point. The defining point-pair condition of a $2$-$(v,k,\lambda)$ design gives, by double-counting pairs $(y,B)$ such that $y \in X \setminus \{x_i\}$ and $\{x_i,y\} \subset B$,
\begin{align*}
r(k-1)=\lambda(v-1).
\end{align*}
Double-counting all point-block incidences gives $|\mathcal B|k=vr$. Since the design is symmetric, $|\mathcal B|=v$, and therefore $r=k$. Hence
\begin{align*}
(NN^\top)_{ii}=k.
\end{align*}
When $i \ne \ell$, the sum counts all blocks containing the pair $\{x_i,x_\ell\}$. The $2$-design hypothesis says that every pair of distinct points lies in exactly $\lambda$ blocks, so
\begin{align*}
(NN^\top)_{i\ell}=\lambda.
\end{align*}
Therefore the diagonal entries of $NN^\top$ are $k$, and the off-diagonal entries are $\lambda$. This is exactly the matrix identity
\begin{align*}
NN^\top = (k-\lambda)I+\lambda J.
\end{align*}
We name this matrix
\begin{align*}
A := (k-\lambda)I+\lambda J.
\end{align*}
[/guided]
[/step]
[step:Prove the point Gram matrix is invertible]
Since the design is nontrivial, $1<k<v$. From the parameter identity
\begin{align*}
k(k-1)=\lambda(v-1),
\end{align*}
we have
\begin{align*}
k-\lambda
=
k-\frac{k(k-1)}{v-1}
=
\frac{k(v-k)}{v-1}
>0.
\end{align*}
Also
\begin{align*}
k+(v-1)\lambda>0.
\end{align*}
The matrix $J$ acts as multiplication by $v$ on $\operatorname{span}\{\mathbb 1\}$ and as $0$ on the subspace
\begin{align*}
\mathbb 1^\perp := \{z \in \mathbb R^v : \mathbb 1^\top z=0\}.
\end{align*}
Therefore $A=(k-\lambda)I+\lambda J$ acts by the positive scalar $k+(v-1)\lambda$ on $\operatorname{span}\{\mathbb 1\}$ and by the positive scalar $k-\lambda$ on $\mathbb 1^\perp$. Hence $A$ is invertible.
Since $NN^\top=A$ is invertible, $N$ is invertible.
[/step]
[step:Use row and column sums to show that $N$ commutes with $A$]
The identities $N\mathbb 1=k\mathbb 1$ and $N^\top\mathbb 1=k\mathbb 1$ imply
\begin{align*}
NJ = kJ, \qquad JN=kJ.
\end{align*}
Indeed, $J=\mathbb 1\mathbb 1^\top$, so
\begin{align*}
NJ=N\mathbb 1\,\mathbb 1^\top=k\mathbb 1\mathbb 1^\top=kJ,
\end{align*}
and
\begin{align*}
JN=\mathbb 1\,\mathbb 1^\top N=\mathbb 1\,(N^\top\mathbb 1)^\top
=\mathbb 1\,(k\mathbb 1)^\top=kJ.
\end{align*}
Thus $NJ=JN$. Since $N$ commutes with $I$ and with $J$, it commutes with
\begin{align*}
A=(k-\lambda)I+\lambda J.
\end{align*}
Therefore
\begin{align*}
NA=AN.
\end{align*}
[/step]
[step:Transfer the Gram identity from points to blocks]
From $NN^\top=A$ and the invertibility of $N$,
\begin{align*}
N^\top=N^{-1}A.
\end{align*}
Therefore
\begin{align*}
N^\top N=N^{-1}AN.
\end{align*}
Since $AN=NA$, multiplying the commutation identity on the left by $N^{-1}$ gives
\begin{align*}
N^{-1}AN=A.
\end{align*}
Hence
\begin{align*}
N^\top N=A=(k-\lambda)I+\lambda J.
\end{align*}
[/step]
[step:Read the block intersections from the column Gram matrix]
For $1 \le j,m \le v$, the $(j,m)$ entry of $N^\top N$ is
\begin{align*}
(N^\top N)_{jm}=\sum_{i=1}^v N_{ij}N_{im}.
\end{align*}
This sum counts the points lying in both $B_j$ and $B_m$, so
\begin{align*}
(N^\top N)_{jm}=|B_j\cap B_m|.
\end{align*}
But
\begin{align*}
N^\top N=(k-\lambda)I+\lambda J.
\end{align*}
Therefore, whenever $j \ne m$, the $(j,m)$ entry is $\lambda$. Hence
\begin{align*}
|B_j\cap B_m|=\lambda
\end{align*}
for all distinct blocks $B_j,B_m \in \mathcal B$. Since the ordering of the blocks was arbitrary, any two distinct blocks of $\mathcal D$ intersect in exactly $\lambda$ points.
[/step]